Oracle 估算数据库大小的方法
一網友問我將一個查詢的結果集存放到臨時表里,如果估算臨時表的大小,當時想的方法是通過統計block來計算。后來想,此方法的操作性也不是很高。 最好是能在查詢操作執行之前就能估算出大小。
查看了一下ALL_TABLES 表,其中有個字段:avg_row_len. 該值單位為bytes。 可以一句這個字段來進行一個估算。
| 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
根據對表大小的估算,進而可以估算出整個數據庫的大小。 在項目測試階段,可以根據所有對象進行估算,從而可以估算出系統上線以后數據庫的大小,根據這些數據可以規劃存儲。這里要注意一點,要給備份留足存儲空間。 一般備份需要的空間是DB的2-3倍。 如果DB 是100G,那么給備份的空間最好是200G以上。
根據dba_segments視圖可以查看數據庫中占用存儲空間的對象:
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.
?
這里主要就是表和索引。把所有表和索引的大小估算出來,在相加就可以估算出DB的大小了。
二. 估算表的大小
表的大小=記錄數*平均字段大小(avg_row_len)
Avg_row_len 可以通過如下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 表未來估計為1000萬行,那么其大小就是1000w*93bytes。
三.估算表上索引的大小
? ? ? ? All_indexes 視圖沒有all_tables 上的avg_row_len 字段,不過我們可以通過視圖和表大小的一個比率進行估算。 表的大小我們可以估算出來,索引的大小可以通過這個比率進行估算。?
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?
計算索引和表的比率:
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,那么對應的索引大小就是1000M*33%=330M。?
把所有表和索引的大小加起來,就是整個數據庫大小的估算值。
總結
以上是生活随笔為你收集整理的Oracle 估算数据库大小的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 某电力企业数据备份方案解析
- 下一篇: goldengate for oracl