Oracle 估算数据库大小的方法

WBOY
풀어 주다: 2016-06-07 17:04:47
원래의
1348명이 탐색했습니다.

根据对表大小的估算,进而可以估算出整个数据库的大

一.说明

一网友问我将一个查询的结果集存放到临时表里,如果估算临时表的大小,当时想的方法是通过统计block来计算。后来想,此方法的操作性也不是很高。 最好是能在查询操作执行之前就能估算出大小。

查看了一下ALL_TABLES 表,其中有个字段:avg_row_len. 该值单位为bytes。 可以一句这个字段来进行一个估算。

AVG_ROW_LEN*

NUMBER

 

Average length of a row in the table (in bytes)

.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。 

把所有表和索引的大小加起来,就是整个数据库大小的估算值。

linux

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!