sql >> Database >  >> RDS >> Oracle

Query om de tabelgrootte in de Oracle-database te controleren

We moeten vaak uitzoeken hoe groot die specifieke orakeltafel is. Stel dat u een enorme hoeveelheid gegevens hebt geladen en de toegewezen grootte van de orakeltabel wilt weten.

We kunnen de onderstaande query gebruiken om de tabelgrootte in orakel te controleren

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

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

Als u geen toegang heeft tot dba_segments, kunt u ook user_segments gebruiken

Voor de grootte 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>’

Voor de grootte 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>’;

we kunnen deze zoekopdracht ook gebruiken om de top tien van grootste tabellen in een bepaald schema of bepaalde tabelruimte te vinden

Top 10 grote tabellen in een bepaald 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;

Top 10 grote tafels in een bepaalde tafelruimte

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;

Maak tabellen groter dan 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;

Hier is de vraag als u ook de ruimte wilt weten die is gekoppeld aan de indexen op de tafel

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
/

Som van de grootte van de tabel voor een bepaald schema

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;

De bovenstaande query's zorgen voor de toegewezen ruimte in de database. Als u geïnteresseerd bent in rijruimte die door de tabel wordt verbruikt, kunt u onderstaande query gebruiken

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

Deze query moet worden uitgevoerd nadat de statistieken voor de tabel zijn gegenereerd.

Als u geïnteresseerd bent in het ruimtegebruik van de tabel over een bepaalde periode of in de groeitrend van het object, kunt u de onderstaande vraag gebruiken

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

Hoe de grootte te berekenen voor de tabel met LOB-segmenten

selecteer uit de kolom BYTES in DBA_SEGMENTS voor de tabel toont het tabelsegment maar bevat geen LOB (CLOB of BLOB) segmentgroottes.
Om de totale grootte voor de tabel en de bijbehorende LOBS-segmenten te berekenen, moet een som van het volgende optreden:
de bytes voor de tabel => van dba_segments
+
de bytes voor de LOB-segmenten => van dba_lobs en dba_segments waarbij segment_type LOBSEGMENT is
+
de bytes voor de LOB Index (Lob Locator) =van dba_indexes en dba_segments

We kunnen de onderstaande query gebruiken om de totale grootte te berekenen

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;

Ik hoop dat je dit artikel leuk vindt over het controleren van de tabelgrootte in de Oracle-database. We hebben verschillende vragen gegeven en u kunt ze gebruiken volgens de vereiste. Geef alsjeblieft de feedback

Gerelateerde artikelen

Tabelruimte controleren in Oracle:meer informatie over het controleren van tabelruimte in Oracle, vrije ruimte in tabelruimte, informatie over groei van tabelruimte, grootte van tabelruimte, bijbehorende gegevensbestanden, grootte van tabelruimte
Tabel wijzigen in Oracle:Tabel wijzigen in Oracle wordt gebruikt om te wijzigen een kolom, verwijder en voeg beperkingen toe, wijzig het gegevenstype van de tabelkolom, wijzig de tabelopslagparameters
maak een tabel in Oracle:Tabellen zijn de basiseenheid van gegevensopslag in een Oracle Database. we bespreken hoe u de Oracle Create Table-opdracht kunt gebruiken om een ​​tabel te maken met een externe sleutel /primaire sleutel
tabel wijzigen kolom orakel toevoegen:Nuttig inzicht in het wijzigen van tabel toevoegen kolom orakel. Details over de functie voor snel toevoegen van kolommen in oracle 11g
asktom question
High Water Mark in Oracle:High Water Mark in de Oracle-database wordt gebruikt om de blokken weer te geven die ooit zijn gebruikt in de levenscyclus van de orakeltabel
ora-00942:leer problemen met de ORA-00942-tabel of -weergave op te lossen in de Oracle-database. Eenvoudige manieren om de fout in minder tijd op te lossen

Aanbevolen cursussen

Hier is de mooie Udemy-cursus voor Oracle SQL
Oracle-Sql-Step-voor-stap:deze cursus behandelt basis-sql, joins, tabellen maken en de structuur wijzigen, weergave maken, Union, Union -alles en nog veel meer . Een geweldige cursus en een must-have cursus voor SQL-starters
De complete Oracle SQL-certificeringscursus :Dit is een goede cursus voor iedereen die Job-klaar wil zijn voor SQL-ontwikkelaarsvaardigheden. Een mooi uitgelegde cursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-ontwikkelaarstool wordt door veel ontwikkelaars gebruikt. Deze cursus geeft ons trucs en lessen om het effectief te gebruiken en een productieve sql-ontwikkelaar te worden
Oracle SQL Performance Tuning Masterclass 2020 :Het afstemmen van prestaties is een van de belangrijkste en meest gezochte vaardigheden. Dit is een goede cursus om erover te leren en te beginnen met het afstemmen van sql-prestaties


  1. Hoe toegang te krijgen tot de gegevens / gegevensmap op een Android-apparaat?

  2. PostgreSQL BESCHRIJVING TABEL Equivalent

  3. Dynamische query uitvoeren met go in sql

  4. Lijst met beschikbare datumnotaties met CONVERT() in SQL Server