维护产生价值:只需加以注意即可降低数据库成本的五种方法
2010-09-16 00:00:00 来源:WEB开发网步骤 1. TABLEC 是访问的第一个表。DB2 优化器选择应用局部筛选 LAST_NM,但是因为所选的索引中不包含 SEQEN_NR,DB2 优化器会决定通过随机的 I/O 获取联结 TABLEB 表所需的所有 SEQEN_NR。因为没有使用包含 LAST_NM 和 SEQEN_NR 的索引结构执行联结,所以联结会推迟到获取数据页面时。(见图 3 中的 No. 1。)
步骤 2. 访问的第二个表 TABLEB 也会由于这样的索引设计损害性能,它应用局部筛选 ROLE_CD,在应用联结谓词之前也执行随机 I/O。因为没有使用索引结构执行联结,所以联结也会推迟到获取数据页面时。(见图 3 中的 No. 2。)
步骤 3. 访问的最后一个表 TABLEA 也会受害,但是这一次使用主/聚簇索引执行联结,使用连续 I/O 获取数据页面,应用局部筛选 GUAR_DT,然后用 ORDER BY 执行排序。(见图 3 中的 No. 3。)
访问的三个表都把筛选或联结推迟到访问数据页面时。这是因为没有同时满足筛选和联结需要的复合索引,DB2 优化器不得不在筛选和联结之间做出选择。
对于这个常用的重要的服务,解决方案包括以下步骤:
修改 LAST_NM.FIRST_NM 索引,在其中添加 SEQEN_NR 和 SSN_NR,从而实现纯索引访问,完全避免对数据页面执行随机 I/O。
修改 ROLE_CD 索引,在其中添加 SEQEN_NR,从而把筛选和联结组合起来。
在 TABLEA 上添加第五个索引 GUAR_DT.SEQEN_NR,从而把筛选和联结组合起来并避免 ORDER BY 排序。
新的索引解决方案根据所有筛选、联结和排序操作组合索引结构,这把 CPU 时间降低到了 0.02 秒。
3. 监视 RID 池失效
某些访问路径必须先完成许多步骤,然后才能返回一个结果行,这种访问路径开销很大。这些访问路径常常需要通过行标识符 (RID) 排序消除随机 I/O,它们被称为 List Prefetch、Multiple Index Access 和 Hybrid Join - Type N。这些访问路径在访问之前使用 RID 池对数据页面号进行预排序。RID 池资源是有限制的,超过这些限制时会发生表扫描。
更多精彩
赞助商链接