5. 获得IQ SQL语句执行计划
“查询计划”描述了有关一个查询已经怎样被执行或将要怎样被执行的重要细节。当你遇到如下情况时需要获得执行计划:
* 你怀疑(或已经知道)一个查询运行的很差
查询计划向你展示了server怎样处理查询,你能够看到什么地方花费的时间最多
* 不能确定查询是否使用了索引,或者是否使用了最适合的索引
查询计划可以告诉你使用了哪些索引。通过设置“Index Advisor”数据库选项,查询计划还能为
你提供一些建议。
在这篇文章中将向大家介绍如何获得IQ查询计划的方法。
(1) IQ查询计划的生成方式
在IQ中,查询计划有三种生成方式:在IQ Message文件(dbname.iqmsg)中输出、生成到一个 HTML 页面文件、在dbisql中直接查看(需要IQ 12.7 ESD#3或以上版本)
IQ使用一组数据库选项来控制查询计划的生成方式。这些选项通常设置为临时的,例如:
Set Temporary Option Query_Detail = ‘ON’;
在IQ 12.5之后,“Query_Plan”选项缺省为 ‘ON’,在IQ Message文件中输出查询计划。如果你不需要查询计划,那么可以关闭这个选项。
(2) 查询计划的生成方法和示例
A.在IQ Message File中输查询计划
下面以一个例子说明,编写一个sql脚本文件test1.sql,文件内容如下:
Set Temporary Option Query_Plan = 'on';
Set Temporary Option Query_Detail = 'on';
Set Temporary Option Query_Plan_After_Run = 'on';
Set Temporary Option Query_Timing = 'on';
Set Temporary Option Query_Name = 'testquery1';
Set Temporary Option Index_Advisor = 'on';
--执行查询语句
select * from test1 where name like 'a%';
下面是脚本执行后在iqmsg中输出的查询计划的例子:
上图示例说明:在消息文件中,查询计划的消息号是20535 。另外其前面的一列是IQconnID(使用sp_iqconnection可以看到连接的IQ conn id)。使用OS的grep命令,通过查询计划的消息号可以对其过滤。
B.在IQ Server端生成html格式的查询计划文件
下面还是以一个例子说明,编写一个sql脚本文件test1.sql,文件内容如下:
Set Temporary Option Query_Plan = 'on';
Set Temporary Option Query_Detail = 'on';
Set Temporary Option Query_Plan_As_Html = 'on';
Set Temporary Option Query_Plan_After_Run = 'on';
Set Temporary Option Query_Timing = 'on';
Set Temporary Option Query_Name = 'testquery1';
Set Temporary option Index_Advisor = 'on';
--执行查询语句
select * from test1 where name like 'a%';
下面是脚本执行后在server端生成的html查询计划的例子(.html文件所在的位置缺省为.db文件所在目录):
C. 在dbisql等客户端以交互式方式查看查询计划(需要IQ 12.7 ESD #3或以上版本)
a. 为了使用这种方式,首先需要具有DBA权限的用户设置如下数据库选项
Set Option public.QUERY_PLAN_TEXT_ACCESS = 'ON'; --为所有用户设置
或
Set Option mpuser.QUERY_PLAN_TEXT_ACCESS = 'ON'; --为特定用户设置
b. 在设置之后,用户以图形方式启动dbisql,然后执行如下语句(这些选项设置之后可以看到更为详细的信息,如果不设置也是可以看到执行计划的):
Set Temporary Option Query_Detail = 'on';
Set Temporary Option Query_Plan_After_Run = 'on';
Set Temporary Option Query_Timing = 'on';
Set temporary option Index_Advisor = 'on';
c. 然后执行用户查询语句,例如:
select * from test1 where name like 'a%'
下面是dbisql中看到的查询计划示例:
到此,有关IQ性能诊断工具就向大家介绍完了,希望对大家初步掌握这些工具能有帮助。掌握这些工具是日后进行性能诊断和分析的基础。
这也是我在2011年春节之前最后一篇博文,在此提前给大家拜年,祝大家春节快乐!
阅读(1211) | 评论(0) | 转发(0) |