一網(wǎng)友問(wèn)我將一個(gè)查詢的結(jié)果集存放到臨時(shí)表里,如果估算臨時(shí)表的大小,當(dāng)時(shí)想的方法是通過(guò)統(tǒng)計(jì)block來(lái)計(jì)算。后來(lái)想,此方法的操作性也不是很高。 最好是能在查詢操作執(zhí)行之前就能估算出大小。
查看了一下ALL_TABLES 表,其中有個(gè)字段:avg_row_len. 該值單位為bytes。 可以一句這個(gè)字段來(lái)進(jìn)行一個(gè)估算。
AVG_ROW_LEN* | NUMBER |
| Average length of a row in the table (in bytes) |
http://download.Oracle.com/docs/cd/E11882_01/server.112/e17110/statviews_2117.htm#i1592091
根據(jù)對(duì)表大小的估算,進(jìn)而可以估算出整個(gè)數(shù)據(jù)庫(kù)的大小。 在項(xiàng)目測(cè)試階段,可以根據(jù)所有對(duì)象進(jìn)行估算,從而可以估算出系統(tǒng)上線以后數(shù)據(jù)庫(kù)的大小,根據(jù)這些數(shù)據(jù)可以規(guī)劃存儲(chǔ)。這里要注意一點(diǎn),要給備份留足存儲(chǔ)空間。 一般備份需要的空間是DB的2-3倍。 如果DB 是100G,那么給備份的空間最好是200G以上。
根據(jù)dba_segments視圖可以查看數(shù)據(jù)庫(kù)中占用存儲(chǔ)空間的對(duì)象:
SYS@anqing2(rac2)> select distinctsegment_type from dba_segments;
SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
TABLE PARTITION
NESTED TABLE
ROLLBACK
LOB PARTITION
LOBSEGMENT
INDEX
TABLE
CLUSTER
TYPE2 UNDO
11 rows selected.
這里主要就是表和索引。把所有表和索引的大小估算出來(lái),在相加就可以估算出DB的大小了。
二. 估算表的大小
表的大小=記錄數(shù)*平均字段大?。╝vg_row_len)
Avg_row_len 可以通過(guò)如下SQL 查詢。 其單位為bytes。
SYS@anqing2(rac2)> selecttable_name,avg_row_len from all_tables where table_name='T1';
TABLE_NAME AVG_ROW_LEN
------------------------------ -----------
T1 93
如果T1 表未來(lái)估計(jì)為1000萬(wàn)行,那么其大小就是1000w*93bytes。
三.估算表上索引的大小
All_indexes 視圖沒(méi)有all_tables 上的avg_row_len 字段,不過(guò)我們可以通過(guò)視圖和表大小的一個(gè)比率進(jìn)行估算。 表的大小我們可以估算出來(lái),索引的大小可以通過(guò)這個(gè)比率進(jìn)行估算。
SQL>create index idx_t1_created on t1(created)
SQL>exec dbms_stats.gather_table_stats('SYS','T1',cascade=>TRUE)
SYS@anqing2(rac2)> selectsegment_name,segment_type,bytes,blocks from dba_segments where segment_namein ('T1','IDX_T1_CREATED');
SEGMENT_NAME SEGMENT_TYPE BYTES BLOCKS
--------------- ---------------------------- ----------
T1 TABLE 6291456 768
IDX_T1_CREATED INDEX 2097152 256
計(jì)算索引和表的比率:
SYS@anqing2(rac2)> select (2097152/6291456)*100,(256/768)*100 from dual;
(2097152/6291456)*100 (256/768)*100
--------------------- -------------
33.3333333 33.3333333
從bytes 和 blocks 的比率是一樣,即索引是表的33%。 那么如果估算表以后的大小是1000M,那么對(duì)應(yīng)的索引大小就是1000M*33%=330M。
把所有表和索引的大小加起來(lái),就是整個(gè)數(shù)據(jù)庫(kù)大小的估算值。
聯(lián)系客服