Informix DBA

关于 Informix 11.7 的更多沉思

最优数据库越来越好...

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: Informix DBA

敬请期待该系列的后续内容。

此内容是该系列的一部分:Informix DBA

敬请期待该系列的后续内容。

免费下载:IBM® Informix® 11.7 试用版(包括 Ultimate Edition、Developer Edition 和 Innovator-C Edition)
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

- 阅读本文的互动数字版!

首先,我们欢迎 Art Kagel 的加入,他和我合作撰写了这一期。我和 Art 合作已经有好多年了,在 2010 年 1 月,他加入 Advanced DataTools,主要关注 Informix 数据库开发、支持和培训。在测试过程中我们一起合作,评估和测试 Informix 11.7 服务器(从前代号为 Panther)。在这一期,我们想要分享一些在主要文章中没有空间讲的一些见解。

优化星型模式

Informix 一直有一个很大的数据集市和数据仓库服务器。版本 11.7 中的 4 个增强让 Informix 成为大型数据仓库和数据保管库的一个真正竞争者。这些增强其中一些是在旧版 Informix Extended Parallel Server (XPS) 引擎中就已出现了,另一些则是新特性。新特性有:

  • 消除外键索引
  • Forest of Trees索引
  • 多索引扫描
  • 星型模式优化器支持

当您有一个含有数亿行的事实表时,外键上索引的取消会有所帮助,而且每一个添加的索引会减慢插入和加载速度。如果索引的第一行不是有选择性的,Forest of Trees 索引结合一个 hash 索引和传统 B+tree 索引的优势。优化器中的多索引扫描的确是数据仓库的一个优势,因为它们可以减少长键复合索引的数量,这有助于提高插入、删除和更新性能。这些索引扫描也可以帮助联机事务处理(OLP)数据库,更多细节在主文章中有说明。

然而,我们需要花点时间在星型模式优化器支持上,这是 XPS 的一个分支。在 11.7 版本中,如果您有很多维度表,您可以在包含所有维度表键的事实表上创建一个单一的复合表。该优化器将可以识别出这个索引,在维度表上使用过滤器来在一个临时表中生成一个维度表键的有效组合列表。优化器然后使用复合索引将临时表连接到事实表,来快速定位在维度表中满足条件的行。我们对这个优化器已经进行过很多测试了,结果令人印象深刻。

最后,这里还有一个我们没有尝试过:文档指出,如果没有一个合适的复合索引可用,星型模式优化器也可以结合多索引扫描技术。在这种情况下,优化器使用另一个来自 XPS 的众所周知的 push-down hash 联接来执行查询,和使用旧版复杂查询处理技术 相比,审查的行数少很多。在这种情况下,任何索引的第一行,不管简单或复杂,都是满足星型联接的一个候选者。Informix 11.7 包含一个新版本,其中的特性令我们这些将 Informix 作为一个数据仓库服务器实现的用户很兴奋。

不再担心盘区

那些有很多盘区、或者至少曾经有过的表,存在两个问题。在版本 11.7 之前,如果您的表有将近 200 个盘区(具体数字根据页面大小、“特定列” 的数目、以及在表格中附加索引的个数而不同),您就会担心您可能填充表的盘区列表,而表将不再接受插入和可变长度行的扩展。问题解决了,Informix 11.7 扩展了表的盘区容量,支持超过 32,000 个盘区,由于盘区加倍的效果使得盘区列表实际上不再受限制。

当然,第二个问题是,有很多高度活跃的盘区的一个表或索引将遭遇性能降低,因为磁头移动的增加和磁头与数据库中其他对象的位置争用的增加。在 11.50xC4 版本之前,您只有几个选择,可以重组一个有很多活跃盘区的数据表(用于高度分散的索引更少),它们都要求这个表暂时处于脱机状态。您可以卸载数据,然后删除,再重新创建一个有更大盘区的表;您可以在这个表上创建一个 CLUSTER 索引;或者您可以在这个表或索引上执行一个 ALTER FRAGMENT ... INIT

当 11.50.xC4 中添加了压缩特性时,随之也引入了 REPACKSHRINK SQL 应用程序编程接口(API)命令。这为表重组问题提供了一些改进,因为您可以使用这些选项来在后台执行一个部分重组,而不需要让表处于脱机状态。然而,REPACK 选项不一定减少盘区数量。它只是将所有数据移动到现有盘区列表中最早的盘区中,而 SHRINK 选项将释放 REPACK 之后不再使用的任何盘区(包括上次部分使用的盘区其中没有使用的部分)。因为大多数表的最大盘区是最后一次添加的那个,而最小盘区是第一次添加的,压缩特性没有太大帮助。

Informix 11.7 引入了新的 DEFRAGMENT SQL API 选项,这将移动数据到最新盘区,创建连续盘区,尽可能合并成一个较大的盘区。当表和索引都处于在线状态时这一切都已完成。随着很多非常小的事务、非常少的争用的创建,引擎一次一页执行这个操作。没有长事务回滚的可能性,这也是最重要的,因为页面被整体移动,页面次序在页面中不能修改,每一行的地址在表格中也不能修改 — 因此没有索引更新是必需的。该操作是非常之快,甚至把它比作 REPACK

最后,一个真正的低开销在线表格重组功能。另外,您可以在任何时候停止操作,稍后重启。对于将您的数据表、索引或表/索引碎片尽可能地重组成一个数量最小的盘区,这就是所有您需要做的:

EXECUTE FUNCTION TASK( 'DEFRAGMENT', 'database:owner.tablename' );

EXECUTE FUNCTION TASK( 'DEFRAGMENT PARTITION', <partnum> );

存储供应

我们想通过简要了解一下新存储供应功能来结束本文。我们继续以页面进行介绍,但是重要的是您现在可以配置您的 Informix 实例了,这样您就不再需要担心 dbspac 耗尽存储空间了。您可以对其进行配置,这样无论是现有块进行扩展,或者当其填满时将新块添加到 dbspace 都是很方便的。

您定义了一个存储池,这可以是 RAW、COOKED 或文件系统文件,或者甚至是一个目录名(引擎将在这些目录内自己创建和分配新文件)。一旦您定义了存储池,您就可以在手动添加 dbspace 或块、或者延伸现有块时使用这个池,或者当 dbspace 中的空闲空间降至您所定义的阈值之下时,您可以定义引擎使用的规则来自动延伸块或使用新块扩展 dbspaces。

正如 John Miller III, STSM — IBM 的嵌入式架构师 — 所说,“Informix 在您观看您最喜欢的电视节目时就可以完成这一切!”

合作伙伴资源
IBM Information On Demand IBM Server and StorageNiteo Partners
PSS SystemsResponsive Systems Safari Books Online

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=632639
ArticleTitle=Informix DBA: 关于 Informix 11.7 的更多沉思
publish-date=03162011