预估表和索引空间容量的方法

最近有一个业务功能要上线,生产数据库环境之前已经到位,目前要做的是估算下,业务数据量对数据库空间,有何影响。开发同学根据表字段定义,分别统计出了最大占用空间,以及预计占用空间量,计算得很细致。


今儿碰巧看见了一篇MOS文章,《How to Estimate the Size of Tables and Indexes Before Being Created and Populated in the Database? (文档 ID 1585326.1)》,其中介绍了一些存储过程,可以用来估算表和索引空间,用起来比较方便,所以做一些实验说明下,会有用武之地,当然之前就说过,工具是用来方便执行一些功能,但前提是需要从原理上理解,融会贯通,将他变为自己的知识,这才是王道。


首先对于表的估算,用到的是DBMS_SPACE包中的CREATE_TABLE_COST这个存储过程,这个存储过程有两个版本,第一个版本是根据平均行长,估算表的容量,第二个版本是根据列的信息,估算表的容量,究竟有何区别?


这是对这两个版本的介绍,



这是这两个版本的定义,



总结下可以看出,这两个版本的相同点,就是需要预计行数、pct_free参数以及表空间名称,这几个参数,输出均有使用量(used_bytes),以及分配量(alloc_bytes)这两个维度。不同点就是,版本一需要平均行长(avg_row_size),版本二需要CREATE_TABLE_COST_COLUMNS类型的变量(colinfos)。


这是对于这两个存储过程,输出信息说明,

  • The used_bytes : represent the actual bytes used by the data. This includes the overhead due to the block metadata, pctfree etc.

  •  The alloc_bytes : represent the size of the table segment when it is created in the tablespace. This takes into account, the size of the extents in the tablespace and tablespace extent management properties.


创建测试表,手工收集表的统计信息,



可以看出,测试表平均行长是68,



用版本一,输入参数为表空间名称,平均行长,预计数据量(10万行),pct_free,输出参数为ub和ab,显示使用的字节数为8036352,分配的字节数为8388608,



上面则是根据平均行长,预估的表容量,下面实际测试10万条数据,检索user_segments视图,其占用空间为9437184字节,



可知,根据版本一存储过程,计算出表预计空间量为8M,实际表占用空间量为9M,



使用版本二的存储过程,其中CREATE_TABLE_COST_COLUMNS类型要求写出所有字段,包括类型和长度,计算出使用的空间容量为9314304,分配的字节数为9437184,这和实际分配的表空间一致,

你可能感兴趣的:(个人心得,技术之我见,Oracle,表空间计算,索引空间计算)