Informix Dynamic Server数据库分段存储
分段存储可以分为轮转法和基于表达式的方法。轮转法是使用Informix Dynamic Server内部定义的规则将表分段存储。在建表时,可以指定对数据的存储采用轮转法,其语法是: CREATE TABLE tablename (aa integer …)
FRAGMENT BY ROUND ROBIN IN dbspace1,dbspace2, ……dbspaceN。
基于表达式的方法是使用用户定义的规则将表或索引分段存储在不同的dbspace中。基于表达式的方法又可以分为范围规则和绝对规则,范围规则是用SQL的关系(>、<、>=、<=)或逻辑操作(and、or)定义表的数据分片的边界,一般用一个字段,也可以根据需要用2个或多个字段。范围规则的语法是: CREATE TABLE tablename (a1integer....)
FRAGMENT BY EXPRESSION
a1 <= 0 IN dbspace1,
a1 >= 0 AND a1 <= 100000 IN dbspace2,
REMAINDER IN dbspace3;
绝对规则是用关系操作符(>、<、>=、<=)与逻辑操作符(and、or)对规则进行定义,可以是表中的多个字段参与分段。绝对规则的语法是: CREATE TABLE tablename (a1 integer....)
FRAGMENT BY EXAMPLE
a1 = 100000 or a1=200000 IN dbspace1,
a1 = 300000 or a1=400000 IN dbspace2,
REMAIDER IN dbspace3;
由于轮转法采用的是Informix Dynamic Server内部定义的规则,所以在使用的过程中,比较简单和方便。基于表达式的方法,使用的是用户定义的规则,为了提高查询效率,就要减轻CPU的负荷,均衡磁盘的I/O操作。因此,用户在使用表达式定义分段规则时,应该遵循以下原则:
1.要使表达式尽可能的简单明了,避免在表达式中使用数据类型的转换,以便在informix Dynamic Server写入或读出数据时尽可能快地解析表达式;
2.为了减少表达式的计算量,在表达式中应该把限制性最强的部分放在前面;
3.在分段表达式中要避免有经常更新的字段,使得分段存储的数据有一个相对固定的位置;
4.对所存储的数据、查询语句进行分析,明确查询输出的结果,使被频繁访问的数据能均衡地分布在多个磁盘上。
分段存储设计的目标是为了给用户提供更好的响应时间,更好的并发性,更好而且更快的备份和恢复,还具有较好的可用性。但是分段存储无形中给数据库增加了管理成本,而且数据库的转移也不太方便。为了达到这样地目标,在对数据库进行分段设计时,就要考虑主机的硬件特性,如CPU个数、速度、磁盘的数目、磁盘控制器的数目、每个磁盘控制器连接的磁盘数目等,及操作系统的性能。在硬件特性和操作系统性能满足分段存储时,可以对一些数据存储量大的表进行分段存储,这样其性能将会有所提高。
分段存储的实例
本文在对分段存储的测试中,使用的是一台HP服务器。该服务器有4个较慢速的CPU,2GB内存,硬盘采用的是raid 5 技术。操作系统是 SCO Unix 5.0.6,数据库是Informix 7.31uc5。在测试的过程中,机器基本闲置。使用onstat -d 命令输出结果如下:
Informix Dynamic Server Version 7.31.UC5 -- On-Line -- Up 7 days 20:44:47 --
307200 Kbytes
Dbspaces
address number flags fchunk nchunks flags owner name
92c5413c 1 1 1 1 N informix rootdbs
92c54d94 2 1 2 1 N informix phydbs
92c54e50 3 1 3 1 N informix logdbs
92c54f0c 4 2001 4 1 N T informix tmpdbs
92c54fc8 5 1 5 7 N informix datadbs
92c55084 6 1001 12 1 N informix datatest1
92c55140 7 1001 13 1 N informix datatest2
7 active, 2047 maximum
Chunks
address chk/dbs offset size free bpages flags pathname
92c541f8 1 1 100 250000 146465 PO- /home/informix/DBS/rootdbs
92c54344 2 2 100 150000 4947 PO- /home/informix/DBS/phydbs |