Oracle
 sql >> Database >  >> RDS >> Oracle

Query per controllare la dimensione della tabella nel database Oracle

Spesso abbiamo bisogno di scoprire quanto è grande quel particolare tavolo dell'oracolo. Supponiamo di aver eseguito un enorme carico di dati e di voler conoscere la dimensione della tabella Oracle allocata.

Possiamo utilizzare la query seguente per controllare le dimensioni della tabella in Oracle

Per le dimensioni della tabella Oracle in 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>';

Per le dimensioni della tabella Oracle in 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 non hai accesso a dba_segments, puoi utilizzare anche user_segments

Per la dimensione in 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>’

Per la dimensione in 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>’;

possiamo anche utilizzare questa query per trovare le prime dieci tabelle più grandi in un particolare schema o tablespace

Prime 10 grandi tabelle in particolare schema

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;

I 10 tavoli più grandi in un tablespace particolare

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;

Elenca tabelle più grandi di 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;

Ecco la query se vuoi conoscere anche lo spazio associato agli indici sulla tabella

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
/

Somma delle dimensioni della tabella per uno schema particolare

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;

Le query di cui sopra forniranno lo spazio allocato nel database. Se sei interessato allo spazio di riga consumato dalla tabella, puoi utilizzare la query sottostante

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';

Questa query deve essere eseguita dopo la generazione delle statistiche per la tabella.

Se sei interessato all'utilizzo dello spazio della tabella in un periodo di tempo o al trend di crescita degli oggetti, puoi utilizzare la query seguente

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

Come calcolare la Dimensione per la tabella contenente i segmenti LOB

seleziona dalla colonna BYTES in DBA_SEGMENTS per la tabella mostra il segmento della tabella ma non include le dimensioni dei segmenti LOB (CLOB o BLOB).
Per calcolare la dimensione totale per la tabella e i segmenti LOBS associati è necessario sommare quanto segue si verificano:
i byte per la tabella => da dba_segments
+
i byte per i segmenti LOB => da dba_lobs e dba_segments dove segment_type è LOBSEGMENT
+
il byte per l'indice LOB (Lob Locator) =da dba_indexes e dba_segments

Possiamo utilizzare la query seguente per calcolare la dimensione totale

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;

Spero che questo articolo su come controllare le dimensioni della tabella nel database Oracle ti sia piaciuto. Abbiamo fornito varie domande e puoi usarle in base alle esigenze. Si prega di fornire il feedback

Articoli correlati

Come controllare il tablespace in Oracle:informazioni su come controllare il tablespace in Oracle, lo spazio libero del tablespace, le informazioni sulla crescita del tablespace, le dimensioni del tablespace, i file di dati associati, le dimensioni del tablespace
Alter Table in Oracle:Alter table in Oracle viene utilizzato per modificare una colonna, eliminare e aggiungere vincoli, modificare il tipo di dati della colonna della tabella, modificare i parametri di archiviazione della tabella
creare una tabella in Oracle:le tabelle sono l'unità di base dell'archiviazione dei dati in un database Oracle. descriviamo come utilizzare il comando Oracle create table per creare una tabella con chiave esterna/chiave primaria
alter table add column oracle:informazioni utili su come modificare table add column oracle. Dettagli sulla funzionalità di aggiunta rapida delle colonne introdotta in Oracle 11g
domanda asktom
High Water Mark in Oracle:High water mark nel database di Oracle viene utilizzato per mostrare i blocchi che sono mai stati utilizzati nel ciclo di vita del tabella oracle
ora-00942:Impara a risolvere i problemi di tabella o vista ORA-00942 non presenti nel database Oracle. Semplici modi per risolvere l'errore in meno tempo

Corsi consigliati

Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque voglia essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento di sviluppo Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql