- 论坛徽章:
- 1
|
谈谈informix extent
楼主的描述很好,也是负责任的。偶在此支持一下。
对于你的两个问题,偶解释一下。
1、如何查看一个表的段数目。
在informix的sysmasters库中,通过执行
select count(*) from sysextends where tabname="表名"
表sysextend记录了各个表每个段的大小和地址信息。
回答:偶给你一个sql你去执行,然后输出系统中所有表或者某个表的extent的字段个数。sql脚本如下:
- dbaccess - -<<!
- database sysmaster;
- select dbsname,tabname,
- count(*) num_of_extents,
- sum( pe_size ) total_size
- from systabnames,sysptnext
- where partnum = pe_partnum
- group by 1, 2
- order by 3 desc,4 desc;
- close database;
- !
复制代码
2、建议我们在进行系统的需求分析时和工程安装前,需要对表有一个初始的数据量的估计,如果一个表确实将来有较大的数据量,且该表所在的dbs还有其他较多的表存在时,我们可以考虑是否一开始就把该表的EXTEND SIZE 、NEXT SIZE 设置比较大。
回答:这个建议非常好,一般的对表有一个初始的数据量的估计是很必要的。但是如果用户在初期没有意识到extent的重要性。并且当extent的数量增长到>;128左右的时候,数据库的性能会大幅下降,此时其它的优化措施带来的好处几乎看不到。对此,采用如下的措施来处理这种情况:
(1)、如果能够估计表的数据量极其增长,那么在crete table的时候,指定extent 和next size。是一种比较好的办法。
(2)、如果在数据库表已经存在大量数据的情况下发现extent太大,此种情况,备份数据,删除表结构,然后计算初始extent和扩展extent大小后,重新load数据。 |
|