互联网服务数据库

SQL调优:不再是资深DBA才能完成的任务

优化查询性能对于 IBM DB2 非常重要,但是调整 SQL 语句有时候需要丰富的经验。这要求相关人员了解如何调整 SQL 才能产生最优的性能。编写得糟糕的 SQL 语句会对性能产生严重影响,会影响服务水平,浪费宝贵的资源,甚至可能导致应用程序中断;这些都会耗费业务时间和资金。  最...显示全部
优化查询性能对于 IBM DB2 非常重要,但是调整 SQL 语句有时候需要丰富的经验。这要求相关人员了解如何调整 SQL 才能产生最优的性能。编写得糟糕的 SQL 语句会对性能产生严重影响,会影响服务水平,浪费宝贵的资源,甚至可能导致应用程序中断;这些都会耗费业务时间和资金。

  最近,在应用程序编程领域,对高度优化的 SQL 的需求越来越迫切了。Hibernate 和 Java Persistence Architecture (JPA) 等自动处理数据库操作的框架越来越受 Java 开发人员欢迎。开发框架可以提高开发人员的生产力,但是使用它们的 DBA 和开发人员无法看到或控制生成的 SQL。实际上,框架可能 “在幕后” 生成 SQL,这些 SQL 的质量可能非常差。

  除此之外,这些 SQL 语句还是动态的,很难找到生成 SQL 的代码。因此,直到应用程序投入生产环境并满负载运行之前,可能无法发现 SQL 性能问题。

  如果开发人员能够在开发期间轻松地做一些 SQL 调优,会怎么样?调优是否可以成为日常任务,让每个开发人员在部署应用程序之前都可以轻松有效地进行调优?IBM Optim Development Studio(以前称为 Data Studio Developer)就可以实现这个目标。

  现在,DBA 和开发人员可以使用 Optim Development Studio 在产生 SQL 的源代码上下文中查看和操控 Java 程序使用的实际 SQL。另外,Optim Development Studio 提供显示功能,让开发人员能够看到哪些 SQL 语句的成本最高,更重要的是,还可以看到 SQL 语句的运行频率。最后,新的查询调优产品可以提供调优建议,这有助于开发人员和 DBA 有效地协作,从而开发快速、低成本的企业级数据库应用程序。

  IBM Optim Query Tuner 简介

  先谈谈开发人员为什么不重视查询调优。首先,开发人员往往只关注查询返回的结果,他们只会问 “我得到需要的数据了吗?” 第二,开发人员常常处于紧迫的时间限制的压力之下,确实没有时间研究查询的性能,而且他们可能无法使用足够大的负载执行单元测试,所以难以发现性能问题。最后,掌握如何使用 EXPLAIN 表和解释其中包含的信息对于开发人员来说并不容易。

  即使开发人员发现了 SQL 问题,从知道有问题到知道如何解决它仍然有一段距离。可以通过 IBM DB2 Visual Explain 了解数据库正在做什么,但是这些信息对于开发人员(甚至 DBA 新手)来说很难理解。另外,DB2 Visual Explain 只描述数据库正在做什么;它并不提供性能调优建议。有经验的 DBA 可能能够解决问题,但是他们常常忙于其他更有价值的活动,帮不上忙;直到问题在生产系统中造成了严重影响,他们才出手救援。

  Optim Query Tuner 可以帮助各种水平的数据库开发人员编写性能更好的 SQL。它为编写高质量的查询和改进数据库设计提供专家建议,有助于降低成本和改进性能。

  顾名思义,Optim Query Tuner 帮助对单一查询进行调优。可以对以下地方的 SQL 语句调用 Optim Query Tuner:

  包、SQL 存储过程、触发器和用户定义函数 (UDF) —— 它们都来自 Eclipse 环境中的 Data Source Explorer

  IBM Data Studio 或其他 Optim 开发产品中集成的查询编辑器和例程编辑器

  Optim Development Studio 中的 SQL Outline 和 Java 编辑器

  数据库包和存储过程的 DB2 编目

  这个单一查询调优功能是 IBM Optim Query Tuner 2.2 引入的。目前,对于 IBM DB2 for z/OS,可以使用 DB2 Optimization Expert for z/OS(不久后将改名为 IBM Optim Query Workload Tuner for DB2 for z/OS)进行单一查询和工作负载调优。

  可视性和建议器选项

  选择要调优的语句之后,可以选择几个可视性和建议器选项。SQL 经验不足的开发人员可以主要依赖 Query Advisor。这个建议器根据最佳实践为重写查询提供建议,帮助提高效率。当选择一个建议时,突出显示 SQL 行,显示对如何重写查询的说明以及对建议的解释(见图 1)。

  图 1: Optim Query Tuner 包含一个查询格式化器和建议器

2009111900374991.jpeg



SQL 调优:不再是资深 DBA 才能完成的任务

  注意,修改查询的建议基于 DB2 编目统计数据是准确的这一假设。可以使用 Query Annotation 控制 SQL 语句的格式以提高可读性,还可以查看表级和列级使用的统计数据。如果没有统计数据,就需要更新 DB2 编目统计数据(Query Tuner Statistics Advisor 可以帮助执行这个操作)。

  通过使用 Query Annotation 提供的格式化功能,可以展开和折叠 SQL 查询的组成部分。如果单击 FROM 子句中的表,它会突出显示 SELECT 和 WHERE 子句中相关的列。同样,在 SELECT 和 WHERE 子句中选择一列时,它会突出显示与这个列相关的表。另外,如果语句引用一个视图,Query Annotation 允许向下钻取到视图中的 SQL 查询。

  比较有经验的开发人员会发现 Access Plan Graph 和 Access Path Advisor 更有帮助。Access Plan Graph 提供与 DB2 Visual Explain 相同的图形,但是还提供统计数据或成本信息。Access Path Advisor 识别潜在的访问路径问题,对这些问题提供解释和处理建议。

  如果您是 DBA 或者自己的开发数据库的实际 DBA,那么还会对 Statistics Advisor 和 Index Advisor 感兴趣。正如前面提到的,只有在编目统计数据是最新的情况下,DB2 优化器才能做出最合适的选择。Statistics Advisor 会指出什么时候应该更新编目统计数据并生成所需的命令;您只需单击一个按钮即可。即使您采用自动统计,Statistics Advisor 也可以提供关于列分布的额外信息。收起
参与4

查看其它 2 个回答dashanli580的回答

dashanli580dashanli580数据库架构师科蓝公司
好文章
IT其它 · 2010-07-30
浏览972

回答者

dashanli580
数据库架构师科蓝公司

dashanli580 最近回答过的问题

回答状态

  • 发布时间:2010-07-30
  • 关注会员:1 人
  • 回答浏览:972
  • X社区推广