sql >> Databasteknik >  >> RDS >> Oracle

Fråga för att kontrollera tabellstorleken i Oracle-databasen

Vi behöver ofta ta reda på hur stort det specifika orakelbordet är. Anta att du gjorde en enorm databelastning och vill veta den tilldelade Oracle-tabellstorleken.

Vi kan använda frågan nedan för att kontrollera tabellstorleken i Oracle

För Oracle-tabellstorlek i 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>';

För Oracle-tabellstorlek i 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>';

Om du inte har tillgång till dba_segments kan du också använda user_segments

För storleken i 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>’

För storleken i 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>’;

vi kan också använda den här frågan för att hitta de tio största tabellerna i ett visst schema eller tabellutrymme

Top 10 stora tabeller i det särskilda schemat

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 stora bord i Speciell bordsyta

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;

Lista tabeller större än 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;

Här är frågan om du vill veta utrymme som är kopplat till indexen i tabellen också

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
/

Summa av storleken på tabellen för ett visst 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;

Ovanstående frågor ger det utrymme som tilldelats i databasen. Om du är intresserad av radutrymme som konsumeras av tabellen kan du använda nedanstående fråga

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

Den här frågan bör köras efter att statistiken har genererats för tabellen.

Om du är intresserad av tabellens utrymmesanvändning under en tidsperiod eller objekttillväxttrend kan du använda frågan nedan

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

Hur man beräknar storleken för tabellen som innehåller LOB-segment

välj från kolumnen BYTES i DBA_SEGMENTS för tabellen visar tabellsegmentet men inkluderar inte LOB (CLOB eller BLOB) segmentstorlekar.
För att beräkna den totala storleken för tabellen och de associerade LOBS-segmenten måste en summa av följande inträffa:
byten för tabellen => från dba_segments
+
byten för LOB-segmenten => från dba_lobs och dba_segments där segment_type är LOBSEGMENT
+
den byte för LOB-indexet (Lob Locator) =från dba_indexes och dba_segments

Vi kan använda frågan nedan för att beräkna den totala storleken

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;

Hoppas du gillar den här artikeln om hur du kontrollerar tabellstorleken i Oracle-databasen. Vi har gett olika frågor och du kan använda dem efter behov. Lämna gärna feedbacken

Relaterade artiklar

Så här kontrollerar du tabellutrymme i Oracle:Lär dig mer om hur du kontrollerar tabellutrymme i Oracle, ledigt utrymme för tabellutrymme, information om tabellutrymmestillväxt, tabellutrymmesstorlek, associerade datafiler, tabellutrymmesstorlek
Ändra tabell i Oracle:Ändra tabell i Oracle används för att modifiera en kolumn, släpp och lägg till begränsningar, ändra datatypen för tabellkolumnen, ändra tabelllagringsparametrarna
skapa tabell i Oracle:Tabeller är den grundläggande enheten för datalagring i en Oracle-databas. vi täcker hur man använder Oracle create table-kommandot för att skapa en tabell med främmande nyckel /primärnyckel
alter table add column oracle:Användbar insikt i How to change table add column oracle. Detaljer om snabb lägga till kolumnfunktion introducerad i Oracle 11g
fråga fråga
Högvattenmärke i Oracle:Högvattenmärke i Oracle-databasen används för att visa de block som någonsin har använts under livscykeln för oracle-tabell
ora-00942:Lär dig att felsöka ORA-00942-tabellen eller -vyn finns inte i Oracle-databasen. Enkla sätt att lösa felet på kortare tid

Rekommenderade kurser

Här är den trevliga Udemy-kursen för Oracle SQL
Oracle-Sql-Steg-för-steg :Den här kursen täcker grundläggande sql, går med, skapar tabeller och ändrar dess struktur, Skapa vy, Union, Union -allt och mycket annat . En bra kurs och måste-kurs för SQL-startare
The Complete Oracle SQL Certification Course :Det här är en bra kurs för alla som vill vara redo för SQL-utvecklare. En trevlig förklarad kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-utvecklarverktyget används av många utvecklare. Den här kursen ger oss tricks och lektioner om hur man effektivt använder den och blir en produktiv SQL-utvecklare
Oracle SQL Performance Tuning Masterclass 2020 :Prestandajustering är en av de kritiska och mest eftertraktade färdigheterna. Det här är en bra kurs för att lära dig om det och börja göra sql-prestandajustering


  1. Fallstudie för SQL Server Databas Server Hardware Upgrade

  2. Hur man får aktuell veckodata i MySQL

  3. MySQL pivotrad till dynamiskt antal kolumner

  4. Hur man kombinerar datum från ett fält med tid från ett annat fält - MS SQL Server