Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1567037
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-01-31 21:49:02

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年春节之前最后一篇博文,在此提前给大家拜年,祝大家春节快乐!

 
  
阅读(3798) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~