IBM DB2 数据库专业论坛's Archiver

deadman 发表于 2010-7-27 18:50

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

优化查询性能对于 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 包含一个查询格式化器和建议器

[attach]4804[/attach]

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 也可以提供关于列分布的额外信息。

deadman 发表于 2010-7-27 18:51

Index Advisor 会分析查询,指出在查询中使用的列上使用索引是否可能提高查询的性能。另外,它会生成索引的 Data Definition Language (DDL),您只需单击按钮即可创建索引。

  在使用 Optim Query Tuner 中的 Index Advisor 时,要记住建议只针对目前调优的单一 SQL 语句;一定要根据整个工作负载的情况考虑这个索引对性能的影响。IBM DB2 Design Advisor 可以提供这种分析。

  通过 Optim Development Studio 使用 Optim Query Tuner

  因为 Query Tuner 可以安装在与 Optim Development Studio 相同的 Eclipse 实例中,这两个产品之间有集成点,所以 Java 开发人员可以在开发过程中自然地调用查询调优功能,获得改写查询的建议,而不会影响开发速度。对于无法访问源代码的 DBA 或开发人员,也可以使用 Optim Development Studio 把性能差的查询替换为用 Optim Query Tuner 调整过的查询。下面三个场景解释这些集成点。

  在 Java 开发期间识别和调整性能热点

  可以使用 Optim Development Studio 捕捉任何新的或现有的 Java 应用程序的 SQL 语句和相关的性能指标,包括使用 Hibernate 等框架创建的应用程序(更多信息请参见 “参考资料” 中的 “Optimize your existing JDBC applications using pureQuery”)。捕捉到的语句和指标显示在 Optim Development Studio “SQL outline” 视图中(以前称为 “pureQuery outline”)。

  图 2: SQL outline 视图允许根据频率或流逝时间调整查询

[attach]4805[/attach]

  如图 2 所示,SQL outline 视图显示 SQL 语句的运行频率和花费的时间。它显示语句的流逝时间,包括总时间、最小、最大和平均时间。另外,它显示每个语句的运行次数。您可以方便地识别出 SQL 热点并从这个视图直接启动 Optim Query Tuner。

  在 SQL outline 视图中,还可以生成 EXPLAIN 信息,然后按成本排序,从而快速地找到成本最高的查询。只需右键单击查询,启动 Optim Query Tuner 进行语句调优。结合考虑成本、流逝时间和执行次数,可以更轻松地决定重点调整哪些查询。

  在开发新 Java 应用程序期间优化查询

  假设您正在使用 Optim Development Studio Java 编辑器开发一个新的 Java 应用程序。您不但可以使用 SQL 助理帮助正确地构造查询,现在还可以通过右键单击 Java 编辑器中的任何 SQL 语句,直接启动 Optim Query Tuner(见图 3)。您会看到带格式和注解的查询,以及访问计划和关于如何纠正潜在问题的建议。

  图 3: 通过右键单击任何 SQL 语句,可以从 Optim Development Studio Java 编辑器直接调优查询

[attach]4806[/attach]

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

  优化现有 Java 数据库应用程序的查询

  这个场景针对那些无法修改底层源代码的 DBA 或开发人员,或者需要快速地纠正严重的性能问题,然后测试并交付源代码修改的开发人员。在这个场景中,运行应用程序以捕捉 SQL 语句,从捕捉到的 SQL 文件直接调用 Optim Query Tuner,最后使用 Optim Development Studio 捕捉文件编辑器把性能糟糕的查询替换为调整过的查询;整个过程都不需要修改源代码。为应用程序设置驱动程序属性之后,它会在下一次运行时选用改进后的 SQL 语句。

  改进开发过程

  我们希望本文能够帮助您考虑改进角色和责任、技能培养和总体开发过程。如果您是 DB2 for Linux, UNIX, and Windows 系统的 DBA,您会高兴地知道 IBM 正在努力为这些系统提供 DB2 for z/OS 上现有的另一个功能:查询工作负载调优和顾问功能,可以帮助识别、隔离和调优生产工作负载中的查询。

pecker 发表于 2010-7-30 08:53

好文章

cedarbird 发表于 2010-7-30 12:39

对普通开发人员而言,有这些可视化的开发工具确实帮助很大.
容易快速上手.

页: [1]
如果您在DB2有任何问题请点击:点击这里给我发消息 点击这里给我发消息DB2技术QQ群:46987967(已满)、69731967(已满)、70737391
DB2 9
学习笔记
DATABASE
08年全年杂志
DB2中国
电子杂志
DB2通用数据库
精简版快速入门
DB2性能调优
入门
DB2、Informix
常见问题解答
DB2认证
详解
DB2认证权威
考试题库

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.