| 免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版 |
|---|
| 下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。 |
无序性遍布在数据库各个角落,其后果通常是令人不快且代价惨重。检索无序数据要比检索有序数据花费更长的时间,并且无序索引的速度也慢得像蜗牛在爬行。对于任何运行 DB2 for
z/OS 的公司来说,无序性一直都是侵蚀资源的危险敌人,它总是向良好的模式设计和 REORG 实用工具定期使用发出猛烈的攻击。
然而,固态硬盘 (SSD) 的到来引起了一场对于无序性真正成本的争论。有些人认为无序数据检索的性能和时间的成本是硬盘驱动器 (HDD) 运行方式的产出(参阅 “固态硬盘:改变数据世界”
IBM Data Management,2011 年第 3 期)。使用 SSD 作为主存储器媒介并应用 REORG 来组织或集群化数据似乎是对稀有系统资源的一种浪费。再者,REORG 使得应用像 IMB System Storage Easy Tier 等这类存储分层解决方案(专门用于使少量 SSD 存储得到最佳利用)变得更加困难。
但有一点是大家所认同的:REORG 成本昂贵,绝非必要不会用到它。事实上,IBM 已对 DB2 10 和 IBM System Storage DS8000 软件做了许多修改,以帮助您避开使用 REORG。但我们真的能弃之不用了吗?或许不能。
集群化 对存储媒介上的相关行进行物理分组,以尽可能地在单一 I/O 旁路进行读取。插入新行会破坏集群化组织(并降低性能),直到使用 REORG 进行重组。
集群化可以提高 HDD 的性能,其中的数据位存储于旋转磁盘并且经由移动磁盘头进行检索。然而 SSD 并没有移动部件,其数据检索的延迟要比 HDD 的数据检索低一个数量级。虽然 DBMS 可能需要更多同步的 I/O 旁路来检索分布在 SSD 上的未集群数据,但是人们认为实际 I/O 速度非常快,没有什么影响。
实际上,关于 SSD 的理论有几个漏洞。首先,即使使用 SSD 最小化 I/O 响应时间,额外的同步 I/O 会增加 CPU 处理成本。其次,I/O 的临界值太快,以至于 “没有什么影响的” 运行时间发生巨大的变化,即使是数据库之间的操作也是如此。
除了这些问题外,REORG 可以通过保持索引有序性来帮助提高性能,无序索引扫描要比有序索引扫描花费更长的时间,既耗时又耗 CPU 资源。最近,IBM 在软件和硬件技术前沿上取得了巨大的进步,进一步提高了无序索引的性能。
DB2 9 使用同步 I/O 对无序索引进行扫描,FICON(System z 使用的 IBM 光纤通道协议)和 HDD 上的 I/O 吞吐量通常为 1-6 MB/秒。相比之下,DB2 10 以异步方式使用列表预取并使服务请求块 (SRB) 适宜于 IBM System z Integrated Information Processor (zIIP),从而节省 CPU 成本。由于采用异步方式,I/O 可以与 CPU 处理时间重叠,从而加快扫描速度。IBM 的测试已表明,DB2 10 扫描无序索引的速度要比 DB2 9 快 5.6 倍。
在硬件方面,DS8000 R6.2 也有助于 DB2 处理无序索引。到目前为止,FICON 的列表预取已相当缓慢。然而,在使用 R 6.2 时,列表预取 I/O 可以使用 System z FICON for System z (zHPF),这会减少 50% 以上的通道时间。此外,列表预取还因 R6.2 中另一个名为 Turbo List Prefetch (TLP) 特性得到改善,该 TLP 基于 DS8000 自适应缓存算法来减少缓存访问。zHPF 和 TLP 一起使用可以使列表预取 I/O 的吞吐量增至 3 倍以上。
在使用 TLP 的 DB2 中,无序索引扫描可以在吞吐量高于 40 MB/秒下完成。该吞吐量通常足以避免任何 I/O 挂起,这意味着应用程序不会等待 I/O 来完成,即存储单元已不再是性能瓶颈。使用相同硬件进行有序索引扫描的 I/O 吞吐量将接近 300 MB/秒 (HDD) 和 400 MB/秒 (SSD),但是如果没有 I/O 挂起发生,那么更快的 I/O 也不会影响到运行时间。
这些快速吞吐量会改变我们对 REORG 的看法吗?如果您要在一个表空间中使用它,那么没必要,因为该进程会自动重组索引。但是,如果您一直在使用 REORG INDEX 来处理由无序索引引起的性能问题,那么 DB2 10、TLP 和 SSD 可以使您的生活变得更加简单。这一组合可以将 I/O 读取叶子页面的时间降到低于 CPU 处理这些页面的时间,这意味着,REORG INDEX 不会加快索引扫描。然而,您也许还想用 REORG INDEX 来清除伪删除索引条目(参见侧栏 “其他无序数据问题”)和回收空闲空间。
现在,让我们来看看在使用索引来确定读取哪些数据行时 REORG 如何影响数据自身的 I/O。索引的集群率 表示就索引键排序序列而言,行的物理顺序。如果集群率高,DB2 会使用动态预取;如果集群率低,则 DB2 会使用列表预取。在某些情况下,REORG 会增加索引的集群率,通过允许优化程序使用列表预取来提高性能。但是,除非正在讨论的索引是集群索引 (其中每个表格一个),否则无法保证 REORG 会增加集群率。
即使索引集群率很高,它所引用的数据还是会遍布整个表格。这会使 GETPAGE 变成跳行顺序 并减少或消除动态预取的效力。如果合格页面不多,那么查询会进行同步 I/O,这将会比使用列表预取的查询更慢。如果 GETPAGE 大多都在单个 128 KB 内,那么查询将运行顺序 I/O,但是它将会收集一些(无效的)中间页。(注意:在某些情况下,读取额外页面可以加快 I/O,但是在使用 TLP 时,只读取 GETPAGE 需要的页面比较好。)
如果您在使用 SSD,GETPAGE 之间的距离并无大碍。但是在考虑 REORG 的值时,就会出现一个争论点,因为 REORG 并不总是影响页面距离。另一方面,如果 REORG 可以减少查询所执行的 GETPAGE 数量,那么不管是什么设备类型 REORG 都会有值。
过去,使用列表预取有时会造成问题,因为它会迫使 DB2 构建已分类记录 ID (RID) 列表并将其存储在 RID 池中。一旦 RID 池耗尽,DB2 就会求助于非常耗时的表扫描(许多查询遭受到 “由表扫描引起的崩溃”)。
DB2 10 可帮助解决此问题,其方法是将 RID 池溢出至工作文件。工作文件存储在一个 DB2 缓冲池,这样可以将其溢出至直接存取存储器 (DASD)。RID 池也可以溢出至 DASD(称为分页 (paging) 的一个进程),但是缓存池 I/O 比分页快很多,并且一般比数据并发列表预取 I/O 快很多,因为每个 32 K RID 块包含 6000 多个 RID。
如果集群率非常高,优化程序不大可能选择列表预取。如果您要使用列表预取,在运行 RUNSTATS 之前先要等到数据被无序化。
最后,有许多方法可以减少您必须使用 REORG 的次数,但是您可能无法完全避开它。当您确实需要使用它时,记得要使用 DSNACCOX 来确定 REORG 调度的资格。此默认参数为一个向导,您可以根据您的 SSD 和/或 TLP 的实现对其进行修改。
我们无法完全消除数据库中的无序性,但是至少有些工具可以使无序性具有更低的破坏性并易于管理。
学习
- 要了解有关 DB2 for z/OS 的更多信息,请访问
developerWorks 上的 DB2 for z/OS 产品专题。
- 要了解有关 DB2 for z/OS 实用程序的更多信息,请访问
DB2 for z/OS Information Center。
- 如需了解解决关于 DB2 的问题的最佳方式,请访问 DB2 最佳实践。
- 通过访问 从 Oracle 迁移到 DB2 专题, 了解 IBM 为数据库迁移提供的解决方案以及相关工具信息。
- 通过访问 developerWorks 中国 Information Management 专区的 DB2 9 技术资源中心 获得更多 DB2 9 相关的文章、教程和多媒体课件等学习资源。
- Ready to Access
DB2 for z/OS Data on Solid-State Drives。
- DB2 10 for z/OS
Technical Overview。
- DB2 10 for z/OS
Performance Topics。
- 通过访问 DB2 V9.7 信息中心 , 了解 DB2 V9.7 的基本概述。
- 通过访问 DB2 认证专栏, 了解 DB2 认证的更多信息。
- 如需了解有关 DB2 的更多信息,请访问 DB2 for Linux, UNIX, and Windows 产品专题。
- 了解并加入 IDUG,国际 DB2 用户组。
获得产品和技术
- 现在可以免费使用 DB2,并下载免费的电子书 《DB2 Express-C 9.7 快速入门》 进行系统学习。下载 DB2 Express-C,这是为社区提供的 DB2 Express Edition 的免费版本,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
- 下载 IM 软件试用版,体验信息管理软件强大的功能;并通过“IBM 软件下载和常见问题交流” 群组进行在线交流。
讨论
- 通过访问 alphaWorks 获得更多 IBM 的前瞻性技术和资源。
-
加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。