设为首页 收藏本站
查看: 1272|回复: 0

[经验分享] 【推荐】[SQL优化工具]Quest.Central.For.Databases——SQL Tuning for SQL Server

[复制链接]

尚未签到

发表于 2015-6-27 08:41:46 | 显示全部楼层 |阅读模式
  随着企业数据库的急剧膨胀和日益复杂,DBA为保证数据库性能所付出的努力与日俱增,手工或使用多种无法集成的管理工具,都会给日常管理和维护带来不必要的困难。 Quest Central for Databases 是一种集成化、图形化、跨平台的数据库管理解决方案,可以管理异构环境下的 Oracle、DB2 和 SQL server 数据库。Quest Central for Databases 消除了企业IT人员管理多种数据库时面临的技术障碍,提高了IT人员工作效率,改善了数据库性能和数据库应用的可用性。为灵活满足用户的不同需求,Quest Central for Databases 采用了模块化产品架构。
  该产品包括下列功能模块:
  1.         数据库管理(DBA)
  2.         数据库监控(Monitoring Pack)
  3.         数据库诊断 (Spotlight Diagnostics)
  4.         数据库分析 (Database Analysis)
  5.         SQL优化 (SQL Tuning)
  6.         空间管理 (Space Management)
  7.         压力测试 (Load Generator)
  8.         数据生成 (Data Generator)
  9.         PL/SQL 开发 (TOAD)
  10.     专家建议 (Knowledge Expert)
  今天主要介绍其中的SQL优化工具—— SQL Tuning for SQL Server
  一、SQL Tuning for SQL Server简介
  SQL语句的优化对发挥数据库的最佳性能非常关键。然而不幸的是,应用优化通常由于时间和资源的因素而被忽略。SQL Tuning (SQL优化)模块可以对比和评测特定应用中SQL语句的运行性能,提出智能化的优化建议,帮助用户改善应用的响应时间。SQL优化模块具有非介入式SQL采集、自动优化和专家建议等功能,全面改善SQL优化工作。
         二、SQL Tuning for SQL Server的使用
  1、打开Quest Database Management Solutions弹出窗口如图1所示 DSC0000.jpg       
      
                                                                          图1   
  2、在红色标记处打开SQL Tuning 优化SQL     
  (1)建立连接。
      在Quest Central主界面上的“Database”树上选择“SQL Server”,然后在下方出现的“Tools”框中选择“SQL Tuning”选项,打开“Lanch SQL Tuning for SQL Server Connections”对话框(图2、图3)。我们在这里建立数据库服务器的连接,以后的分析工作都会在它上面完成。
           DSC0001.jpg            
                                         图2 “建立连接”对话框
            DSC0002.jpg                   
                                         图3
       双击“New Connection”图标,在弹出窗口中输入数据库的信息,单击“OK”,然后单击“Connect”即可。
  (2)分析原始SQL语句 ,在单击“Connect”后将弹出一个新窗口,如图4
           DSC0003.jpg      
                                                                  图4
  在打开窗口的“Oriangal SQL”文本框内输入需要分析的原始SQL语句,红色标记处选择对应的数据库名,SQL语句代码如下:   
  

DSC0004.gif DSC0005.gif 原始SQL语句

SELECT dbo.Person_BasicInfo.*, dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO,
      dbo.Graduater_GraduaterRegist.RegistTime AS BaoDaoTime,
      dbo.Graduater_GraduaterRegist.RegistMan AS RegistMan,
      dbo.Graduater_Business.ComeFrom AS ComeFrom,
      dbo.Graduater_Business.Code AS Code, dbo.Graduater_Business.Status AS Status,
      dbo.Graduater_Business.ApproveResult AS ApproveResult,
      dbo.Graduater_Business.NewCorp AS NewCorp,
      dbo.Graduater_Business.CommendNumber AS CommendNumber,
      dbo.Graduater_Business.EmployStatus AS EmployStatus,
      dbo.Graduater_Business.NewCommendTime AS NewCommendTime,
      dbo.Graduater_Business.GetSource AS GetSource,
      dbo.Graduater_Business.EmployTime AS EmployTime,
      dbo.Graduater_Business.Job AS Job, dbo.Graduater_Business.FillMan AS FillMan,
      dbo.Graduater_Business.FillTime AS FillTime,
      dbo.Graduater_Business.IsCommendOK AS IsCommendOK,
      dbo.Graduater_Business.ApproveUser AS ApproveUser,
      dbo.Graduater_Business.ApproveTime AS ApproveTime,
      dbo.Graduater_Business.RegistTime AS RegistTime,
      dbo.Graduater_Business.EmployCorp AS EmployCorp,
      dbo.Graduater_Business.JobRemark AS JobRemark,
      CASE WHEN dbo.Graduater_Business.ComeFrom = 'WS' THEN '网上登记' WHEN dbo.Graduater_Business.ComeFrom
       = 'HP' THEN '华普大厦' WHEN dbo.Graduater_Business.ComeFrom = 'JD' THEN '精典大厦'
       WHEN dbo.Graduater_Business.ComeFrom = 'MC' THEN '赛马场' WHEN ComeFrom =
       'ZX' THEN '高指中心' END AS ComeFromName,
      dbo.Person_Contact.Address AS Address, dbo.Person_Contact.Zip AS Zip,
      dbo.Person_Contact.Telephone AS Telephone, dbo.Person_Contact.Mobile AS Mobile,
      dbo.Person_Contact.Email AS Email, dbo.Person_Contact.IM AS IM,
      dbo.Person_Skill.ForeignLanguage AS ForeignLanguage,
      dbo.Person_Skill.ForeignLanguageLevel AS ForeignLanguageLevel,
      dbo.Person_Skill.CantoneseLevel AS CantoneseLevel,
      dbo.Person_Skill.MandarinLevel AS MandarinLevel,
      dbo.Person_Skill.Language AS Language,
      dbo.Person_Skill.TechnicalTitle AS TechnicalTitle,
      dbo.Person_Skill.ComputerLevel AS ComputerLevel,
      dbo.Person_EmployPurpose.JobType AS JobType,
      dbo.Person_EmployPurpose.Vocation AS Vocation,
      dbo.Person_EmployPurpose.JobPlace AS JobPlace,
      dbo.Person_EmployPurpose.Salary AS Salary,
      dbo.Person_EmployPurpose.OnJobDate AS OnJobDate,
      dbo.Person_EmployPurpose.CorpType AS CorpType,
      dbo.Person_EmployPurpose.Job AS RequireJob, YEAR(GETDATE())
      - YEAR(dbo.Person_BasicInfo.Birthday) AS Age,
      dbo.Graduater_Business.EmployType AS EmployType,
      dbo.Graduater_Business.EmployTypeCode AS EmployTypeCode,
      dbo.Graduater_Business.EmployCorpType AS EmployCorpType,
      CASE WHEN dbo.Graduater_Business.PrintStatus = '已打印' THEN '已打印' ELSE '未打印'
       END AS PrintStatus, dbo.Graduater_Business.PrintTime AS PrintTime,
      CASE WHEN dbo.Graduater_Business.EmployStatus = '是' THEN '已就业' ELSE '未就业'
       END AS EmployStatusView
FROM dbo.Person_BasicInfo INNER JOIN
      dbo.Graduater_Business ON
      dbo.Person_BasicInfo.PersonID = dbo.Graduater_Business.PersonID LEFT OUTER JOIN
      dbo.Graduater_GraduaterRegist ON
      dbo.Graduater_Business.GradBusinessID = dbo.Graduater_GraduaterRegist.GraduaterGUID
       INNER JOIN
      dbo.Person_Contact ON
      dbo.Person_BasicInfo.PersonID = dbo.Person_Contact.PersonID INNER JOIN
      dbo.Person_Skill ON
      dbo.Person_BasicInfo.PersonID = dbo.Person_Skill.PersonID INNER JOIN
      dbo.Person_EmployPurpose ON
      dbo.Person_BasicInfo.PersonID = dbo.Person_EmployPurpose.PersonID  然后点击工具栏上的“Execute”按钮,执行原始的SQL语句,SQL Tuning会自动分析SQL的执行计划,并把分析结果显示到界面上(图5)。          DSC0006.jpg            
                       
                      图5 分析原始SQL语句
     (3)优化SQL。
     现在我们点击工具栏上的“Optimize Statement”按钮,让SQL Tuning开始优化SQL,完成后,可以看到SQL Tuning产生了19条与原始SQL等价的优化方案(图6)。
         DSC0007.jpg    
                                                        图6 SQL优化方案
   (4)获得最优SQL。
       接下来,我们来执行上面产生的优化方案,以选出性能最佳的等效SQL语句。在列表中选择需要执行的优化方案(默认已全部选中),然后点击工具栏上的“Execute”按钮旁边的下拉菜单,选择“Execute Selected”。等到所有SQL运行完成后,点击界面左方的“Tuning Resolution”按钮,
可以看到最优的SQL已经出来啦,运行时间竟然可以提高21%!(图7)
         DSC0008.jpg    
                                            图7 “Tuning Resolution”界面
       最优的SQL语句如下:  
  

优化后的SQL语句

SELECT dbo.Person_BasicInfo.*,
       dbo.Graduater_GraduaterRegist.RegistNO AS RegistNO,
       dbo.Graduater_GraduaterRegist.RegistTime AS BaoDaoTime,
       dbo.Graduater_GraduaterRegist.RegistMan AS RegistMan,
       dbo.Graduater_Business.ComeFrom AS ComeFrom,
       dbo.Graduater_Business.Code AS Code,
       dbo.Graduater_Business.Status AS Status,
       dbo.Graduater_Business.ApproveResult AS ApproveResult,
       dbo.Graduater_Business.NewCorp AS NewCorp,
       dbo.Graduater_Business.CommendNumber AS CommendNumber,
       dbo.Graduater_Business.EmployStatus AS EmployStatus,
       dbo.Graduater_Business.NewCommendTime AS NewCommendTime,
       dbo.Graduater_Business.GetSource AS GetSource,
       dbo.Graduater_Business.EmployTime AS EmployTime,
       dbo.Graduater_Business.Job AS Job,
       dbo.Graduater_Business.FillMan AS FillMan,
       dbo.Graduater_Business.FillTime AS FillTime,
       dbo.Graduater_Business.IsCommendOK AS IsCommendOK,
       dbo.Graduater_Business.ApproveUser AS ApproveUser,
       dbo.Graduater_Business.ApproveTime AS ApproveTime,
       dbo.Graduater_Business.RegistTime AS RegistTime,
       dbo.Graduater_Business.EmployCorp AS EmployCorp,
       dbo.Graduater_Business.JobRemark AS JobRemark,
       CASE WHEN dbo.Graduater_Business.ComeFrom = 'WS' THEN '网上登记'
            WHEN dbo.Graduater_Business.ComeFrom = 'HP' THEN '华普大厦'
            WHEN dbo.Graduater_Business.ComeFrom = 'JD' THEN '精典大厦'
            WHEN dbo.Graduater_Business.ComeFrom = 'MC' THEN '赛马场'
            WHEN ComeFrom = 'ZX' THEN '高指中心' END AS ComeFromName,
       dbo.Person_Contact.Address AS Address,
       dbo.Person_Contact.Zip AS Zip,
       dbo.Person_Contact.Telephone AS Telephone,
       dbo.Person_Contact.Mobile AS Mobile,
       dbo.Person_Contact.Email AS Email,
       dbo.Person_Contact.IM AS IM,
       dbo.Person_Skill.ForeignLanguage AS ForeignLanguage,
       dbo.Person_Skill.ForeignLanguageLevel AS ForeignLanguageLevel,
       dbo.Person_Skill.CantoneseLevel AS CantoneseLevel,
       dbo.Person_Skill.MandarinLevel AS MandarinLevel,
       dbo.Person_Skill.Language AS Language,
       dbo.Person_Skill.TechnicalTitle AS TechnicalTitle,
       dbo.Person_Skill.ComputerLevel AS ComputerLevel,
       dbo.Person_EmployPurpose.JobType AS JobType,
       dbo.Person_EmployPurpose.Vocation AS Vocation,
       dbo.Person_EmployPurpose.JobPlace AS JobPlace,
       dbo.Person_EmployPurpose.Salary AS Salary,
       dbo.Person_EmployPurpose.OnJobDate AS OnJobDate,
       dbo.Person_EmployPurpose.CorpType AS CorpType,
       dbo.Person_EmployPurpose.Job AS RequireJob,
       YEAR(GETDATE()) - YEAR(dbo.Person_BasicInfo.Birthday) AS Age,
       dbo.Graduater_Business.EmployType AS EmployType,
       dbo.Graduater_Business.EmployTypeCode AS EmployTypeCode,
       dbo.Graduater_Business.EmployCorpType AS EmployCorpType,
       CASE WHEN dbo.Graduater_Business.PrintStatus = '已打印' THEN '已打印'
            ELSE '未打印' END AS PrintStatus,
       dbo.Graduater_Business.PrintTime AS PrintTime,
       CASE WHEN dbo.Graduater_Business.EmployStatus = '是' THEN '已就业'
            ELSE '未就业' END AS EmployStatusView
  FROM dbo.Person_BasicInfo
       INNER JOIN dbo.Graduater_Business
          ON dbo.Person_BasicInfo.PersonID = dbo.Graduater_Business.PersonID
       LEFT OUTER JOIN dbo.Graduater_GraduaterRegist
         ON dbo.Graduater_Business.GradBusinessID = dbo.Graduater_GraduaterRegist.GraduaterGUID
       INNER JOIN dbo.Person_Contact
          ON dbo.Person_BasicInfo.PersonID = dbo.Person_Contact.PersonID
       INNER JOIN dbo.Person_Skill
          ON dbo.Person_BasicInfo.PersonID = dbo.Person_Skill.PersonID
       INNER JOIN dbo.Person_EmployPurpose
          ON dbo.Person_BasicInfo.PersonID = dbo.Person_EmployPurpose.PersonID
OPTION (FORCE ORDER)  
  (5)学习书写专家级的SQL语句 。
      通过上面的步骤,我们已经可以实现自动优化SQL语句,但更重要的是,我们还可以学习如何书写这样高性能的SQL语句。点击界面左方的“Compare Scenarios”按钮,我们可以比较优化方案和原始SQL中的任意2条SQL语句,SQL Tuning会将它们之间的不同之处以不同颜色表示出来,
还可以在下方的“执行计划”中,通过比较两条SQL语句的执行计划的不同,来了解其中的差异(图8)。
         DSC0009.jpg      
                                      图8 “Compare Scenarios”界面
     三、总结
      SQL Tuning等人工智能自动SQL优化工具的出现,为我们节省出大量的时间和精力。借助这些工具的帮助,书写专家级的SQL语句将不再是难事。
   Quest.Central.For.Databases下载地址:
   http://58.251.57.206/down?cid=1669258673&t=14&fmt=&usrinput=Quest.Central&dt=0&ps=0_0&rt=0kbs&plt=0&spd=9
   SQL Tuning操作手册英文版:
     http://files.iyunv.com/dreamof/SQL.Tuning.rar
  
    注意:该软件试用期只有7天,我这里有注册机,需要的请留Email,到时统一发送!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-80871-1-1.html 上篇帖子: SQL Server 表分区实战系列(文章索引) 下篇帖子: SQL Server调优系列进阶篇(查询语句运行几个指标值监测)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表