Jak Obliczyć Rzeczywisty Rozmiar Tabeli?

Ten wpis dotyczy wyliczenia rzeczywistego rozmiaru danych przechowywanych w tabeli w bazach danych Oracle.

CREATE TABLE t1 (id NUMBER NOT NULL, name CHAR(2000) DEFAULT 'A')
/

INSERT INTO t1 (id) values (3)
/

ANALYZE TABLE t1 COMPUTE STATISTICS;
COMPUTE SUM OF BLOCKS ON REPORT;
BREAK ON REPORT;

SELECT t.num_rows,
       t.blocks,
       t.empty_blocks,
       t.avg_space,
       t.avg_row_len,
       t.num_freelist_blocks,
       s.blocks AS segment_blocks,
       s.bytes
  FROM dba_tables t,
       dba_segments s
 WHERE t.owner = s.owner
   AND t.table_name = s.segment_name
   AND t.owner = USER
   AND t.table_name = 'T1'
/

CLEAR BREAKS
NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE AVG_ROW_LEN SEGMENT_BLOCKS BYTES
 -------- ------ ------------ --------- ----------- -------------- -----
        1      5            3     15863        2009              8 131072

Analizując powyższe widać, że do przechowywania tabeli T1 z jednym rekordem potrzebujemy 8 bloków segmentu, z czego 5 bloków przechowują jakiekolwiek dane. Każdy z tych bloków jest wypełniony tylko w niewielkim ułamku, co widać w kolumnie AVG_SPACE. Tyle przestrzeni w bloku jest pusta. Szybko wyliczając 16384 – 15863 = 521. Uśredniając, w każdym z pięciu bloków siedzi 521 bajtów danych.

Idąc tym tropem rzeczywistą zajętość miejsca przez tabelę można wyliczyć z poniższego wzoru, gdzie db_block_size to rozmiar bloku ustawiony na bazie w v$parameter:

(db_block_size – avg_space) * blocks

Podstawiając do wzoru
(16384 – 15863) * 5 = 2605 bajtów

Komentarze |0|

Legenda *) Pola oznaczone gwiazdką są wymagane
**) Możesz używać tych znaczników i atrybutów HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Kategoria: SQL
Tagi: