Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta para verificar o tamanho da tabela no banco de dados Oracle


Muitas vezes precisamos descobrir o quão grande é essa mesa de oráculo em particular. Suponha que você tenha feito uma grande carga de dados e queira saber o tamanho da tabela oracle alocada.

Podemos usar a consulta abaixo para verificar o tamanho da tabela no oracle

Para o tamanho da tabela oracle em MB
select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024,2) as "Object Size (Mb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_name=’<table_name>’
and owner='<Table owner>';

Para o tamanho da tabela oracle em GB
select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_name=’<table_name>’
and owner='<Table owner>'
and owner='<Table owner>';

Se você não tiver acesso a dba_segments, também poderá usar user_segments

Para o tamanho em MB
select segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024,2) as "Object Size (Mb)"
, tablespace_name as "Tablespace"
from user_segments
where segment_name=’<table_name>’

Para o tamanho em GB
select
segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from user_segments
where segment_name=’<table_name>’;

também podemos usar esta consulta para encontrar as dez maiores tabelas em um determinado esquema ou tablespace

As 10 principais tabelas grandes em esquema específico
select * from (select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where owner=’<schema>’  and segment_type='TABLE' order by 4 desc)  where rownum < 11;

As 10 principais tabelas grandes em um tablespace específico
select * from (select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where tablespace_name =’<tablespace name>' and segment_name='TABLE' order by 4 desc ) where rownum <11;

Listar tabelas maiores que 10G
select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_type='TABLE' where bytes/1024/1024/1024 >10  order by 4 desc;

Aqui está a consulta se você quiser saber também o espaço associado aos índices na tabela
with tables
as
(
select segment_name tname, to_char(bytes/1024/1024,'999,999.99') table_size
from user_segments
where segment_type = 'TABLE'
and segment_name not like 'BIN%'
),
indexes
as
(
select table_name, index_name, scbp, rn,
(select to_char(bytes/1024/1024,'999,999.99') from user_segments where segment_name = INDEX_NAME and segment_type = 'INDEX') index_size
from (
select table_name, index_name,
substr( max(sys_connect_by_path( column_name, ', ' )), 3) scbp,
row_number() over (partition by table_name order by index_name) rn
from user_ind_columns
start with column_position = 1
connect by prior table_name = table_name
and prior index_name = index_name
and prior column_position+1 = column_position
group by table_name, index_name
)
)
select decode( nvl(rn,1), 1, tables.tname ) tname,
decode( nvl(rn,1), 1, tables.table_size ) table_size,
rn "INDEX#",
indexes.scbp,
indexes.index_name,
indexes.index_size
from tables, indexes
where tables.tname = indexes.table_name(+)
and tables.tname = '&1'
order by tables.tname, indexes.rn
/

Soma do tamanho da tabela para um esquema específico
select owner,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='TABLE' group by owner;

As consultas acima fornecerão o espaço alocado no banco de dados. Se você estiver interessado no espaço de linha consumido pela tabela, poderá usar a consulta abaixo
select round((num_rows*avg_row_len/1024),2) used_space_bytes from dba_tables where table_name ='<table name>'
and table_owner='<table owner';

Essa consulta deve ser executada após a geração das estatísticas para a tabela.

Se você estiver interessado no uso do espaço da tabela durante um período de tempo ou na tendência de crescimento do objeto, poderá usar a consulta abaixo
select * from table(dbms_space.OBJECT_GROWTH_TREND('<table owner>','<table name>','TABLE'));

Example
SQL> select * from table(dbms_space.OBJECT_GROWTH_TREND('SCOTT','EMP_DATA','TABLE'));
TIMEPOINT SPACE_USAGE SPACE_ALLOC QUALITY
---------------------- ---------- ------------ --------
05-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
06-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
07-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED

Como calcular o tamanho da tabela que contém segmentos LOB

selecione na coluna BYTES em DBA_SEGMENTS para que a tabela mostre o segmento da tabela, mas não inclua os tamanhos dos segmentos LOB (CLOB ou BLOB).
Para calcular o tamanho total da tabela e os segmentos LOBS associados, uma soma dos seguintes deve ser ocorrem:
os bytes para a tabela => de dba_segments
+
os bytes para os segmentos LOB => de dba_lobs e dba_segments onde segment_type é LOBSEGMENT
+
o bytes para o LOB Index (Lob Locator) =de dba_indexes e dba_segments

Podemos usar a consulta abaixo para calcular o tamanho total
ACCEPT SCHEMA PROMPT 'Table Owner: '
ACCEPT TABNAME PROMPT 'Table Name: '
SELECT
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S
WHERE S.OWNER = UPPER('&SCHEMA') AND
(S.SEGMENT_NAME = UPPER('&TABNAME'))) +
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S, DBA_LOBS L
WHERE S.OWNER = UPPER('&SCHEMA') AND
(L.SEGMENT_NAME = S.SEGMENT_NAME AND L.TABLE_NAME = UPPER('&TABNAME') AND L.OWNER = UPPER('&SCHEMA'))) +
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S, DBA_INDEXES I
WHERE S.OWNER = UPPER('&SCHEMA') AND
(I.INDEX_NAME = S.SEGMENT_NAME AND I.TABLE_NAME = UPPER('&TABNAME') AND INDEX_TYPE = 'LOB' AND I.OWNER = UPPER('&SCHEMA')))
"TOTAL TABLE SIZE"
FROM DUAL;

Espero que você goste deste artigo sobre como verificar o tamanho da tabela no banco de dados Oracle. Demos várias consultas e você pode usá-las de acordo com a necessidade. Por favor, forneça o feedback

Artigos relacionados

Como verificar o tablespace no Oracle:Aprenda como verificar o tablespace no Oracle, tablespace free space, informações de crescimento do tablespace, tamanho do tablespace, arquivos de dados associados, tamanho do tablespace
Alter Table in Oracle:Alter table in oracle é usado para modificar uma coluna, remover e adicionar restrições, alterar o tipo de dados da coluna da tabela, alterar os parâmetros de armazenamento da tabela
criar tabela no oracle:As tabelas são a unidade básica de armazenamento de dados em um banco de dados Oracle. abordamos como usar o comando Oracle create table para criar uma tabela com chave estrangeira / chave primária Detalhes sobre o recurso de adição rápida de coluna introduzido no oracle 11g
pergunte a pergunta
High Water Mark in Oracle:High Water Mark no banco de dados Oracle é usado para mostrar os blocos que já foram usados ​​no ciclo de vida do tabela oracle
ora-00942:Aprenda a solucionar problemas de tabela ou visualização ORA-00942 não existe no banco de dados Oracle. Maneiras fáceis de resolver o erro em menos tempo

Cursos recomendados


Aqui está o bom curso da Udemy para Oracle SQL
Oracle-Sql-Step-by-step:Este curso abrange sql básico, junções, criação de tabelas e modificação de sua estrutura, criação de exibição, união, união -tudo e muitas outras coisas . Um ótimo curso e curso obrigatório para iniciantes em SQL
O Curso Completo de Certificação Oracle SQL :Este é um bom curso para quem quer estar pronto para trabalhar com habilidades de desenvolvedor SQL. Um bom curso explicado
Oracle SQL Developer:Essentials, Tips and Tricks :A ferramenta de desenvolvedor Oracle Sql está sendo usada por muitos desenvolvedores. Este curso nos dá truques e lições sobre como usá-lo efetivamente e se tornar um desenvolvedor sql produtivo
Oracle SQL Performance Tuning Masterclass 2020 :O ajuste de desempenho é uma das habilidades críticas e mais procuradas. Este é um bom curso para aprender sobre isso e começar a fazer o ajuste de desempenho do sql