数据库空间估算
在做数据库设计过程中必须要进行多个方面的计划,其中空间估算尤其是一个DBA所不能回避的问题。
空间估算的准确与否决定了
1。系统对资源的需求--投资问题
2。数据分布是否合理--数据结构设计问题
3。应用设计,特别是数据存取方面的设计--系统运行性能问题等。
同时,由于ORACLE数据类型的多样,数据模型的复杂,空间估算也代表了相当大的工作量。
通常的空间估算包括了对TABLE,INDEX,CLUSTER,ROLLBACK SEGMENT,TEMPORARY SEGMENT以及REDO LOG方面等的计算。在本文中重点给出了对TABLE,INDEX的估算。
应该强调的是估算工作主要针对数据库中比较大的表,以及在应用中变化量较大的表。
在进行空间估算之前,有必要再回顾以下认识:
1。对于数据块的认识:
。数据块的大小有DB_BLOCK_SIZE决定,并且只有通过重建数据库来得到调整。空间计算的根据来自于数据块。
。数据块由数据块头,数据区组成。数据区的使用由PCTFREE,PCTUSED控制。当INSERT发生时,
PCTFREE决定了该块所能容纳的最多的数据,即,剩余空间占数据块实际空间的百分比不小于PCTFREE。
空间估算中PCTFREE是很一个很重要的参数。
2。对于在表上进行的事务(TRANSACTION)类型要有一个清晰的认识,因为这会帮助如何更好的确定PCTFREE & PCTUSED。
例如:
如果PCTFREE的值太大,记录又可能很长,这会引起行链接(ROW-CHAINING),同时空间利用率也不高; 如果PCTFREE的值太小,会影响块数据记录的增长,容易引起行迁移(ROW-MIGURATING);
如果PCTUSED的值太大,空间上似乎没什么问题,但数据块的操作上又有潜在的性能问题,因为数据块需要在
FREELIST上反复搬动;
如果PCTUSED的值太小,则又出现了空间利用率不高的问题。
3。PCTFREE & PCTUSED表示的是DB_BLOCK_SIZE减去数据块头后的百分比值。
4。ORACLE采用的是延迟写(DELAYED CLEANOUT)方式来完成事务处理,所以由DELETE及UPDATE等操作释放的空间并不会
马上被利用。这一点在数据变化频繁时需要加以考虑。
5。记录结尾空值(TRAILING NULLS)不占存储空间,但如果出现在记录中间,则会占用1 byte。所以ORACLE建议尽可能
将经常出现空值的列放在结构定义的尾部。
6。CHAR,DATE是定长数据类型,NUMBER,VARCHAR2,LONG,LONG RAW等是变长数据类型。其中DATE的长度固定为7 BYTES,
包括世纪,年,月,日,时,