以下的文章主要向大家讲述的是DB2优化性能之使用解释工具来对SQL 语句进行调优的实际操作步骤,在实际操作中解释工具一般都是用来显示被查询优化器用来运行一个 SQL 语句的查询访问计划。
它包含了用于运行 SQL 语句关于相关操作非常广泛的信息,比如计划操作去、它们的 arguments、执行顺序和成本。因为查询访问计划是查询性能中最重要的因素之一,为了能诊断查询性能问题,能够理解解释工具的输出非常重要。
解释信息通常用于:
理解为什么应用程序DB2优化性能发生了变化
评估性能调优的效果
分析性能变化
为了帮助你理解查询性能变化的原因,需要调优前后的解释信息,你可以通过执行下面步骤得到它们:
在你做任何更改之前,抓取查询的解释信息并保存解释表。另外,也可以保存 db2exfmt 解释工具的输出。然而,为了更成熟的分析,把解释信息保存在解释表中可以更方便用 SQL 查询,又提供了把数据保存在关系型 DBMS 中在维护上明显的优势。此外 db2exfmt 工具可以在任何时间运行。
如果你不想、或不能访问 Visual Explain 来查看这些信息,就保存或打印当前编目统计信息。你也可以使用 db2look 生产力工具来帮助执行这个任务。另外,如果是你用 DB2 9.5,在语句被解释的同时搜集解释快照。 Db2exfmt 工具将自动格式化包含在快照中的信息。
这在使用自动或是统计信息收集的时候尤其重要,因为查询优化器使用的统计信息可能还没有存入系统编目表中,或者他们可能在语句从系统编目表中获取信息到被解释的过程中被更改了。
保存或打印数据定义语言(DDL)语句,包括这那些 CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE TABLESPACE 。 Db2look 同样可以执行这个任务。
通过这个方法收集的信息,为将来的分析提供了一个参考点。对动态 SQL 语句来说,当你***次运行你的应用程序时,你可以搜集这个信息。对于静态语句,也可以在绑定的时候搜集这个信息。在一个主要系统更改之前搜集这个信息非常重要,比如安装一个新的服务级别或 DB2 版本或者一个很大的配置改动,比如增加或删除数据库分区和分布数据。
这是因为这类系统更改可能造成访问计划的不利更改。虽然访问计划退步应该很少发生,但是有这些可用信息将允许更快的你解决DB2优化性能退步的问题。要分析一个性能变化,把之前的信息和现在你开始分析的时候收集到的关于查询和环境的信息进行比较。
一个简单的例子,你的分析可能显示索引不再作为访问计划的一部分被用到。使用 Visual Explain 或 db2exfmt 显示的编目统计信息,你可能注意到 index 级别数远远高于查询***次绑定到数据库的时候的值。然后你可以选择执行下面的某个操作:
重组索引
为你的表和索引搜集新的统计信息
在重新绑定的时候搜集解释信息。
在你执行其中某个操作之后,再检查一下查询计划。如果索引再一次被使用了,这个查询的性能可能不再是个问题。重复这些步骤直到问题被解决。
评估性能调整效果
你可以进行一系列的操作来帮助提高查询性能,比如校对配置参数、添加容器、和搜集刷新编目统计信息。
在你这些方面进行了更改,如果在被访问计划选择到的方面有更改的话,你可以使用解释工具来判断影响。例如,如果你基于索引指南添加一个索引或物化查询表(MQT),解释数据可以帮助你判断是否索引或物化查询表最终如你所期望的被用到了。
虽然解释输出提供了让你判断选中的访问计划的信息和成本,对一个查询来说精确测量DB2优化性能提高的***方法是使用基准的是技术。
【编辑推荐】