Informix动态服务器表分片策略的计划和调整


“数据分片”允许在表一级对数据存储进行控制。“表分片”是INFORMIX数据库的一个特征。用户可以对表中的记录或索引进行分组,并且存储在不同的位置,这样可以将数据存储到多个磁盘上,从而减少对磁盘I/O的竞争。数据分片的方案以及分片数据所存放的一组dbspace构成了“分片策略”。数据分片有两种基本类型:基于轮转分片“和”基于表达式分片”,对于“基于轮转法分片”,正如其名字一样,数据是根据轮转法方式存入表中的。“基于表达式分片”则根据表中的一个或多个字段对分片的规则进行定义。一般在预知查询条件时采用这种方式,从而避免查询中对某些分片的扫描。

对“表中的数据”和"索引"进行分片主要是为了提高应程序的效率,由于INFORMIX动态服务器可以并行地扫描多个磁盘上的数据,从而实现内部查询的并行操作,因此采用”分片“技术可以提高查询效率。内部查询的并行化有助于减少对一个复杂查询的响应时间。”表分片“技术与并行数据查询(PDQ)特征联系在一起使用,这样INFORMIX服务器可以分配多条线索。从所有数据分片上并行地选取数据。此外,还可以仅仅对包含“目标数据”的数据分片进行扫描。从而大幅度地提高了整个系统效率。“DATASKIP"这一个特征还允许用户跳过那些出现故障或者不包含“目标数据”的数据分片,当某些数据所在的盘出现故障时,就可以体现出高度的“数据可获得性”我们通过大量的数据分片将数据分布在许多的磁盘上,也实现了外部查询的并行操作。这样在大量用户对同一个表进行访问时,可以减少I/O的竞争,每秒钟完成的事务数(系统吞吐能力)也得到了提高。“表分片”技术还通过对存储在dbspace上的数据分片进行备份/恢复操作。

分片方案

在“创建表”和“创建索引”时候均可以用到分片方案。索引可以附加在与其相关联的数据上,或与数据分离存放。一个索引如果出现在对表数据的分片方案中,就可以认为索引已经附加在数据上。另外一个方面,如果索引的分片方案与数据不同,就称为索引与数据分离。这种情况下,索引存放在指定的dbspace上。“数据分片”方式主要有两种:“基于轮转法”和“基于表达式”的方案

轮转法方案

轮转法(PR)所使用的分片规则是系统内部定义的。使用这种方案,新追加的记录被存放在轮转法方式指定的下一个数据分片。记录所插入的第一个数据分片也是随机选定,例如,下列语法用于创建一个名为xyz的表:

CREATETABLExyzFRAGMENTBYROUNDROBIN

INdbspace1,dbspace2......dbspaceN

INFORMIX不支持用轮转法方式创建索引,因为这样会降低系统性能。轮转法方案的优点在于各数据分片上数据量是比较均匀的,对记录进行更新时,并不需要对记录进行转移。然而轮转法有一个缺陷,在进行一个查询时,要扫描所有的数据分片。因此,轮转法方案不支持DATASKIP,不允许INFORMIX动态服务器越过某个数据分片。如果不支持DATASKIP,同时又有一个数据分片出现错误,那么整个查询将会失败,因为不能确定出现故障的数据分片上是否有符合条件的数据记录存在。轮转法方案适用的情况是:用户需要快速加载数据,用户预先不知道数据访问的方式。用户的数据经常更新,或者是用户对于数据分布方式未知。

“基于表达式”的分片方式

对于“基于表达式的分片方案“,用户可以用下面两种规则对数据进行分片”

范围规则

范围规则用SQL的关系或逻辑操作定义表的数据分片的边界。范围规则可以包含关系操作符,比如>,<,>=,<=,还可以包含一些逻辑操作符,比如AND。范围规则最好根据表的某一个字段进行分片,但也可以根据两个或者多个字段进行分片。下面的分片实例运行效率并不很高,因为向表中插入一行时候需要进行太多的运算。所有不符合表达式条件的记录将存放在REMAINDERdbspace中。基于“范围表达式”的分片方案可以确保只对包含目标数据的数据分片进行扫描。

下面是一个采用“基于范围表达式分片方案”创建表的例子:

CREATETABLExyz(aainteger....)

FRAGMENTBYEXPRESSION

aa<=100INdbspace1

aa>1000ANDaa<2000INdbspace2

REMAINDERINdbspace3

绝对规则

“绝对规则”使用了SQL的关系与逻辑操作符。与“范围规则”不同,“绝对规则”运行用户采用关系操作符与逻辑操作符对规则进行定义。此外,表中可以有多个字段参与分片。

例:FRAGMENTBYEXAMPLE

zipcode=94536ORzipcode=94538INdbspace

zipcode=94025ORzipcode=92310INdbspace

REMAIDERINdbspace3

对于以上这种分片方案,必须知道每一个邮政编码所联系的数据个数,以确保每个数据分片上的数据量比较平衡,从而使INFORMIX动态服务器减少扫描的数据分片的数目。指定分片方案时,要确保数据分片之间不互相重叠。此外,定义数据分片时可以不包括REMAINDER分片。

分片的基本原则

“数据分片”的表达式必须尽可能简单,因为执行较复杂的表达式将加重CPU的负荷。同时,数据库中并不是每一个表都需要分片,除非能从“数据分片”中得到显著的收益。“分片”的表达式因为能确保磁盘I/O操作均衡,尽管我们没必要制定一个均衡的数据分片方案。如果大量的查询只对表数据中很小的区域进行访问,那么应该用表达式将那些被频繁访问的数据分片到多个盘上,尽管这样的分片也许数据量并不均衡。表达式应该把限制性最强的部分放在前面。对表达式进行修正是为了减少表达式的计算量,减少每次访问的数据量,从而最终减轻CPU的负荷。如果表达式中第一个不等式的结果为假,那么整个表达式的结果也将为假,因此不必计算表达式的其它部分(AND表达式)。比如说,为了插入数值25,下列表达式需要计算6个不等式:

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus