DB2 SQL语句性能调优利器- explain tool (部分转载)

来源:百度文库 编辑:神马文学网 时间:2024/04/20 15:46:58
DB2 SQL语句性能调优利器- explain tool (部分转载)
当我们发现某个SQL语句执行很慢时,可以通过查看它的访问计划来定位原因,如是否执行了合适的索引、是否采用了正确的连接方法等。但是我们发现很多用户对访问计划的生成和解释工具的使用存在很多疑惑,本文通过一些实例来解释具体的用法,希望对大家有所帮助。(文中后段引用的文章虽然有些翻译的比较拗口,但总体上还是不错的,可以参考) 步骤1. 创建explain表
访问计划的采集和评估是通过一些explain命令和工具实现的,在采集和评估之前需要先创建一些数据表来存放解释数据。在/sqllib/misc下有个文件叫EXPLAIN.DDL
db2 connect to
db2 -tvf /sqllib/misc/EXPLAIN.DDL (unix和linux下注意大小写)
在当前数据库中会生成9张解释表,第2步采集的解释数据会存放到这些表中。 步骤2. 采集explain数据和explain snapshot数据
explain数据包含关于一条 SQL 语句的访问计划的详细信息。此信息跨多个不同的解释表存储。
explain shapshot数据包含一条 SQL 语句的当前内部表示以及所有相关信息。此信息存储在 EXPLAIN_STATEMENT 解释表的 SNAPSHOT 列中。
explain和explain snapshot的解释数据采集有如下几种方法:
执行 EXPLAIN SQL 语句 设置 CURRENT EXPLAIN MODE 特殊寄存器/CURRENT EXPLAIN SNAPSHOT 特殊寄存器   在 PRECOMPILE 或 BIND 命令中使用 EXPLAIN 或 EXPLSNAP 绑定选项 Explain SQL:
explain语句为单条动态SQL语句收集解释数据,如
explain plan for "select * from employee"
-------------------------------------------
Current explain mode为多条动态SQL语句收集解释数据:
>db2 set current explain mode explain (打开注册变量为explain模式)
>db2 "select * from employee"
>db2 "select * from department"
>...
>db2 set current explain mode no (关闭解释模式)
-------------------------------------------
Prep(或延迟bind) ...explain为嵌入式(如SQLC等)SQL语句收集解释数据:
>db2 prep myapp.sqc explain yes explsnap yes  步骤3. 查看和评估解释数据
DB2提供了如下几个查看工具,其中db2exfmt最为强大,其余两个可辅助。
 db2expln  db2exfmt  Visual Explain db2exfmt -d -g tic -s % -n % -# 0 -w -1 -o explain1.txt
具体命令的使用请参看DB2 command reference或信息中心
转载请注明源自www.DB2China.net,请保留版权.
原文地址:http://www.db2china.net/club/thread-6500-1-1.html