Často potřebujeme zjistit, jak velký je ten konkrétní věštecký stůl. Předpokládejme, že jste provedli obrovské zatížení dat a chcete znát velikost přidělené tabulky Oracle.
Ke kontrole velikosti tabulky v oracle
můžeme použít níže uvedený dotazPro velikost tabulky Oracle v 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>';
Pro velikost tabulky Oracle v 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>';
Pokud nemáte přístup k dba_segments, můžete také použít user_segments
Pro velikost v 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>’
Pro velikost v 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>’;
tento dotaz můžeme také použít k nalezení prvních deseti největších tabulek v konkrétním schématu nebo tabulkovém prostoru
10 nejlepších velkých tabulek v konkrétním schématu
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;
10 nejlepších velkých stolů v konkrétním tabulkovém prostoru
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;
Uveďte tabulky větší než 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;
Zde je dotaz, pokud chcete znát také prostor spojený s indexy v tabulce
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 /
Součet velikosti tabulky pro konkrétní schéma
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;
Výše uvedené dotazy poskytnou prostor přidělený v databázi. Pokud vás zajímá prostor řádků spotřebovaný tabulkou, můžete použít níže uvedený dotaz
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';
Tento dotaz by měl být spuštěn po vygenerování statistik pro tabulku.
Pokud vás zajímá využití prostoru tabulky za určité období nebo trend růstu objektu, můžete použít níže uvedený dotaz
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
Jak vypočítat velikost pro tabulku obsahující segmenty LOB
výběr ze sloupce BYTES v DBA_SEGMENTS pro tabulku zobrazuje segment tabulky, ale nezahrnuje velikosti segmentů LOB (CLOB nebo BLOB).
K výpočtu celkové velikosti tabulky a souvisejících segmentů LOBS musí být součet následujících vyskytují:
bajty pro tabulku => z dba_segments
+
bajty pro segmenty LOB => z dba_lobs a dba_segments, kde typ_segmentu je LOBSEGMENT
+
the bajtů pro index LOB (Lob Locator) =z dba_indexes a dba_segments
K výpočtu celkové velikosti můžeme použít níže uvedený dotaz
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;
Doufám, že se vám tento článek o tom, jak zkontrolovat velikost tabulky v databázi Oracle, bude líbit. Dali jsme různé dotazy a můžete je použít podle požadavku. Uveďte prosím zpětnou vazbu
Související články
Jak zkontrolovat tabulkový prostor v Oracle:Přečtěte si o tom, jak zkontrolovat tabulkový prostor v Oracle, volný prostor tabulkového prostoru, informace o růstu tabulkového prostoru, velikost tabulkového prostoru, přidružené datové soubory, velikost tabulkového prostoru
Změnit tabulku v Oracle:K úpravám se používá Alter tabulka v oracle sloupec, zrušení a přidání omezení, změna datového typu sloupce tabulky, změna parametrů úložiště tabulky
vytvoření tabulky v oracle:Tabulky jsou základní jednotkou ukládání dat v databázi Oracle. zabýváme se tím, jak používat příkaz Oracle create table k vytvoření tabulky s cizím klíčem /primární klíč
alter table add column oracle:Užitečný pohled na Jak změnit tabulku add column oracle. Podrobnosti o funkci rychlého přidávání sloupců představené v oracle 11g
položit otázku
High Water Mark v Oracle:High Water Mark v databázi Oracle se používá k zobrazení bloků, které byly kdy použity v životním cyklu Tabulka oracle
ora-00942:Naučte se odstraňovat problémy s tabulkou nebo pohledem ORA-00942 v databázi Oracle neexistuje. Snadné způsoby, jak chybu vyřešit za kratší dobu
Doporučené kurzy
Zde je pěkný kurz Udemy pro Oracle SQL
Oracle-Sql-krok za krokem:Tento kurz pokrývá základní sql, spojení, vytváření tabulek a úpravu jejich struktury, vytváření zobrazení, sjednocení, sjednocení – vše a mnoho dalších věcí. . Skvělý kurz a kurz, který musíte mít pro začátečníky SQL
Úplný certifikační kurz Oracle SQL :Toto je dobrý kurz pro každého, kdo chce být Job připraven na vývojářské dovednosti SQL. Pěkně vysvětlený kurz
Oracle SQL Developer:Základy, tipy a triky :Vývojářský nástroj Oracle Sql používá mnoho vývojářů. Tento kurz nám poskytuje triky a lekce, jak jej efektivně používat a stát se produktivním vývojářem sql
Oracle SQL Performance Tuning Masterclass 2020 :Ladění výkonu je jednou z kritických a nejvyhledávanějších dovedností. Toto je dobrý kurz, jak se o tom dozvědět a začít s laděním výkonu SQL