维护产生价值:只需加以注意即可降低数据库成本的五种方法
2010-09-16 00:00:00 来源:WEB开发网由任意数量的程序添加到 RID 池中的 RID 越多,出现失效的概率就越大,RID 池失效会导致表扫描。RID 池失效的现象之一是连续预抓取数量出现意外的高峰。跟踪连续预抓取数量是查明失效的一种方法。更好的方法是使用在线监视器。图 4 给出在线监视器监视一个使用 Hybrid Join - Type N 的程序在一小时内得到的数据,它发现了 61 次 RID 池失效。
图 4. 一个使用 Hybrid Join - Type N 访问路径的程序在中午 12 点到下午 1 点之间出现了 61 次 RID 池失效
查看原图(大图)
对这个问题的一个解决方案是增加 RID 池的大小,但是这只能暂时减少失效;更糟糕的是,这可能根本无效。更好的解决方案是使用 DB2 跟踪或在线监视器查明高度依赖于 RID 池的查询。每个查询需要通过一直抓取到整个结果集的末尾来证明它对 RID 池的使用是适当的。无法通过这项测试的任何查询都需要关闭使用 RID 池的访问路径,方法是在查询的末尾添加 OPTIMIZE FOR n ROWS 或 FETCH FIRST n ROWS ONLY 子句。DB2 10 将利用外部工作文件处理溢出,从而减轻失效的影响,因此不再需要分析查询。但是,最好在迁移到 DB2 10 之前找出并解决这种问题,否则会使用大量工作文件。
4. 压制冻结的或性能差的 SQL
冻结的 SQL 就是嵌入在购买的应用程序中您无法修改的 SQL。冻结的 SQL 中的查询有时候不符合性能规则,但是您只能忍受它们。需要让这些查询使用尽可能少的资源。例如,WHERE DATE(col_TS) BETWEEN :date1 AND :date2 是一个 Stage 2/Residual 条件。这个谓词应该改写为 WHERE col_TS BETWEEN TIMESTAMP(:date1, '00:00:00')AND TIMESTAMP(:date2, '59:59:99'),这是可以使用索引的 Stage 1/Sargable。但是,您无法做修改。
更多精彩
赞助商链接