oracle 中预测表的存储容量

oracle 中预测表的存储容量
 如果一个系统的生命周期可以确定,或者说数据库中的数据保存时间可以确定,那
么我们就可以通过一个简单的计算,大致估算出数据库所存放的数据量的大小,以作为
存储设备采购的一个依据。
可以通过估算占有存储空间的所有数据库对象(其实主要是估算业务用户下的所有
对象)的容量,来计算数据的容量。
占用空间的对象都可以在 DBA_SEGMENTS 视图里面找到,数据库的空间的分配是
以段的形式分配的,凡是段对象,都是要占用空间的,它包括表、索引、物化视图、其
他的一些大对象(比如全文索引对象)。
如果在开发阶段能够预测每个表的记录数,然后我们取得这个表的字段总长度,于
是表的容量=记录数*字段长度。
一个表中索引的大小和索引的类型,以及索引键值的重复率有很大的关系,开发人
员可以通过模拟一些实际数据来估算出索引和表数据的一个比例,然后做出索引所占空
间的估算。
一个计算容量的例子如下。
我们创建一个表,然后在表上创建索引,之后对表和索引进行分析,然后查询视图
user_tables 就可以得到表的大致容量。
SQL> create table t as select * from dba_objects; 
Table created. 
SQL> create index t_ind on t(object_id); 
Index created. 
SQL> exec dbms_stats.gather_table_stats(user,'t',cascade=>true); 
PL/SQL procedure successfully completed.
SQL> select avg_row_len from user_tables where table_name='T'; 
AVG_ROW_LEN
-----------
     93 
这个数值就是表的平均行长,如果我们能够估算出预期表的记录数 N ,那么最终表
占用的空间就是  93 bytes*N:
SQL> select segment_name,segment_type,bytes from user_segments where
segment_name in ('T','T_IND'); 
SEGMENT_NAME               SEGMENT_TYPE                BYTES
-------------              ------------------           ----------
T                            TABLE                         6291456
T_IND                       INDEX                      1048576 
SQL> select trunc((1048576/6291456)*100) ind_pct from dual; 
   IND_PCT
----------
        16 
我们取得了测试表中表和索引的大小,计算出索引和表大小的百分比,这样,我们
就获得了最终这个表的空间使用量为:
表的总使用量 = 93 bytes*N(1+16) 
这就是预期这个表的容量,如果能够预测出未来数据库的数据量,我们就可以比较
客观地估算出数据库预期的容量大小。
另外 一个容易被开发商忽略的问题是对系统备份数据占用空间的考虑。我遇到的一
些系统就有这个问题,系统上线之后才发现,设计人员根本就没有考虑过系统备份的问
题,也没有预留出足够的空间来做数据备份,给 DBA 带来的压力相当大。为了保证数
据的安全,我设计了一套备份方案,由于磁盘的空间有限,在备份新的数据的同时,还
需要及时删除一些旧的备份数据,在这种磁盘空间捉襟见肘的空隙下工作,DBA 有时候
觉都不能睡安稳。
FROM:让Oracle跑得更快-Oracle 10g性能分析与优化思路 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2