简介
Data Studio Developer 这个新的发行版的主要优点有:
它提供更多的信息来帮助您进行 SQL 调优。
它提高了 OpenJPA 和 .NET 应用程序的服务质量。
通过它可以更好地理解使用 SQL 的 Java 应用程序。
通过它可以提高生成率和促进开发人员与 DBA 之间的协作。
可以减少或消除 Java 数据库应用程序的 SQL 注入风险。
运行实际场景的先决条件
为了实践后面的场景,需要安装以下东西:
Data Studio Developer 2.1(很快就有试用代码)
DB2® for Linux®, UNIX®, and Windows® —— DB2 Express-C 就可以了
DB2 附带的 sample 数据库
让开发人员获得更多信息来进行 SQL 调优
识别 SQL 语句和它们执行的次数
通过现有的分析工具,可以识别应用程序中的哪些 Java™ 方法花费最长的运行时间。而通过 Data Studio Developer 2.1,则可以查看包含对数据库的调用的 Java 方法的性能度量,获取更深入的信息。无论使用 pureQuery、JDBC 还是其他框架,都可以识别应用程序中每条 SQL 花费的时间、它运行的次数以及它运行的最长、最短和平均时间。
在 Data Studio 中尝试下面这些简单的步骤:
理解 pureQuery 中的 SQL 性能度量
pureQuery outline 中显示应用程序运行的每条 SQL 语句的以下信息:
SQL 运行的次数 - Number of times run
SQL 语句每次运行的时间加起来的总时间 - Total time
SQL 运行花费的最长时间 - Max time
SQL 运行花费的平均时间 - Average time
SQL 运行花费的最短时间 - Min time
可以使用该信息来识别哪些 SQL 语句将通过优化受益,并识别出有问题的 SQL。还可以使用该信息识别 SQL 语句执行的次数。
在视图中,进入到 Data Management > Data Source Explorer(之前是 Database Explorer)。建立到 sample 数据库的一个连接,并将该连接命名为 SAMPLE。
创建一个 Java 项目,将其命名为 myDSDPrj。
下载文件 TutMod.java 和 Util.java,将它们复制到 db2jcc.example 包中。该文件表示一个简单的现有的 JDBC 应用程序,您将使用它来运行不同的场景。
为了将 pureQuery 支持添加到项目中:
右键点击该项目,选择 pureQuery -> Add pureQuery support。
选择 SAMPLE,并添加适当的模式,以限定 STAFF 表。
在下面的图中,模式为 SSURANGE。
选中 Enable SQL capturing and binding for JDBC applications 复选框。
图 1. 添加 pureQuery 支持
注意,现在可以指定一个默认的模式,以限定表和视图。使用新的 Default path widget 限定您未限定的例程。
为了收集性能度量,使用 pureQuery 配置运行应用程序:
在运行应用程序之前,设置模式以限定 STAFF 表。为此,打开 TutMod.Java,找到第 66 行,将值 SSURANGE 改为您的模式,并保存该文件。
stmt.execute("set current schema SSURANGE");
为了使用 pureQuery 配置运行应用程序,打开 TutMod.java,然后右键点击该文件,选择 Run -> Run Configurations。
选择 pureQuery,并为数据库名称、服务器、端口、userID 和密码等参数(图 2)提供值,然后单击 Run。
这样将收集执行的 SQL 以及性能信息。
图 2. 运行应用程序以收集 SQL 度量
要查看性能信息:
右键点击 myDSDPrj 并选择 Show pureQuery outline。
在 pureQuery outline 中,单击 Toggle Profile 按钮。
展开 myDSDPrj 项目,可以看到每条 SQL 语句的性能信息。
例如,下面的图显示 SELECT 语句被运行了 2 次,花费的总时间为 598 毫秒。
图 3. SQL 执行度量
SELECT 语句运行得比较多,应用程序可以通过优化这条 SQL 获益。
在不必更改代码的情况下调优和优化应用程序
如果使用的是 DB2 for z/OS
DB2 Optimization Expert for z/OS 可以为如何提高一条 SQL 语句的性能提供专业的建议。如果使用即将发布的 DB2 Optimization Expert 新的发行版,实际上可以与 Data Studio Developer 共享 shell,所以您将可以将 SQL 语句从 pureQuery XML 编辑器复制到 Optimization Expert,然后将经过优化的、等效的语句复制回这个编辑器。
发现有问题的 SQL 后,就需要优化它。对于生产应用程序或打包的应用程序,也许不能更改应用程序的源代码,但是您可能希望能够更改产生的 SQL。例如,您可能想更改 SQL,以利用新添加的索引,或者限制返回的行数,又或者添加非常需要的 ORDER BY 子句。
Data Studio Developer 2.1 提供了一个受控编辑器,通过它可以用等效的、很可能更好的语句替代应用程序生成的现有 SQL 语句。这个编辑器自动验证语句的等效性,并且拒绝不等效的语句。
在 Data Studio Developer 中尝试以下简单的步骤:
使用 pureQueryXML 编辑器编辑 pureQuery XML 文件
当替换一条现有的 SQL 语句时,用于替换的语句与现有的语句在参数的数量和类型上必须一致,并且结果集形状是相同的。如果替换的 SQL 不一致,或者有验证错误(语法或语义),那么编辑器显示这些错误,而且只有在修复了这些错误之后才能保存该文件。如果想回到应用程序最初发出的 SQL,可以使用 Reset to capture statement 菜单。对于不想绑定的 SQL 语句,删除它。
在 myDSDPrj 中,展开 pureQueryFolder。双击 capture.pdqxml。
右键点击 SELECT 语句(SELECT id, name, dept, job, years, salary, comm FROM staff WHERE id = ?),并选择 Edit。这是您在图 3 中看到的 SELECT 语句。选择默认模式,以限定您的表。
图 4. 编辑现有的 SQL,以减少返回的行数
现在用下面的 SQL 替换该语句,下面的 SQL 语句是等效的,但是返回更少的行:
SELECT id, name, dept, job, years, salary, comm FROM staff WHERE id = ? fetch first 2 rows only
单击 Save。
图 5. 替换为经过优化的 SQL
您已经更改了 SQL,使之返回更少的行,现在再次运行它,看看性能度量中有什么不同。
为了再次运行应用程序:
打开 pdq.properties,将 captureMode 设为 OFF,并添加 pdq.enableDynamicSQLReplacement=TRUE
pdq.captureMode=OFF pdq.executionMode=DYNAMIC pdq.enableDynamicSQLReplacement=TRUE 。
使用 pureQuery 配置运行应用程序。
要再次查看性能度量,右键点击 myDSDPrj 并选择 Show pureQuery outline。
下面的图显示 SELECT 语句运行了 2 次(和之前一样),但是总时间为 519 毫秒。注意,SQL 语句运行的时间比之前更短。
图 6. 替换为经过优化的 SQL 之后性能更好
提高 OpenJPA 和 .NET 应用程序的服务质量
JPA 使问题诊断和服务质量变得容易
现在,您可以获得关于访问 DB2 数据的现有或新的 JPA 应用程序发出的任何 SQL 和 JPAQL 的信息。您还可以无缝地使用静态 SQL,而不必更改任何应用程序代码。如果您的应用程序使用 DB2,那么可以使用 WebSphere® Application Version 7 中的静态生成器(wsdb2gen)来收集 SQL。您不必运行应用程序就可以获得大多数好处。对于其他情况,可以与客户机优化相