教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · IBM DB2教程

DB2中地终极SQL性能调节技术

学院最新推荐文章
教程推荐
『DB2中地终极SQL性能调节技术』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-8-12 

使用针对工作负载的正确的性能调节技术,以避免硬件升级和优化DB2性能

性能通过响应时间,吞吐量,峰值响应时间,命中和每秒会话来衡量。SQL编码和调节技术直接影响性能。开发高性能的DB2应用需要对DB2技术的深入了解。

当然在小数据量时这些技术无足轻重。忽略的连接,子查询,表的表达式和CASE表达式的程序完全可以在轻量级负载下工作的很好。使用100%的SELECT INFO语句来进行数据获取的程序,在开始会非常的迅速。但是一旦数据量和会话速度增加,性能将受到很大影响。DB2的可扩展性需要小的,优化的SQL加上方案设计,性能结构,缓冲池,和针对工作负载模式优化的存储。另外的方案就是升级硬件了。当然对于有着硬件升级的无尽预算的人来说,不用阅读本文了。对于其他人,我将讲解如何编码聪明的SQL以及调优的访问路径。

指针对于DB2性能的影响

曾经有段时间,在一个大的复杂的银行应用程序中存在着一个批处理程序。这个新的批处理程序和访问路径被通过代码走查的方式检查过了。因为项目截止日期的原因测试很少;在实际的首次运行中,程序在运行10个小时之后终止了。一个很慢的代码走查之后,发现了7个指针,每个指针访问一个不同的表中的数据。每个指针在其他打开的指针的循环中被打开,在彼此间传递数据。也就是说,这个程序在DB2以外竟然结合了7个表。这不是聪明的SQL。这个信息需要进入到7个表;然而,每个指针只能进入一个。因此,7个指针被合并为一个聪明的指针:

SELECT COL1, COL2, rest of the columns
FROM ADDR A, NAME N, T3, T4, T5, T6, T7
WHERE A.COL1 = N.COL9
AND N.COL9 = T3.COL3
AND T3.COL3 = T4.COL4
AND T4.COL4 <> T5.COL5
AND T4.COLX <> T5.COLY
AND T5.COL6 = T6.COL6
AND T6.COL6 = T7.COL7
AND T6.CODE = :hv

这个批处理在第二天用了四分钟就完成了。大多数人可能会结束这个成功的任务了,但是务实的人不会。一个缓慢的EXPLAIN信息走查发现了一个有趣的表连接序列问题。优化器选择了开始7个表的复杂的循环连接,还使用了一系列的大的数据表(ADDR和NAME),它们每个都包含5千万行数据。这不是DB2优化器的典型行为。然而,有一些使用<>比较小表之间列的连接情况。这些比较对于优化器来说很难估计,因为DB2 catalog包含了相等列而非不等列。这里就需要访问路径优化了。DB2优化者脑中肯定有多种推荐的解决方案,一些可以在包或语句层次上,另外的一些工作在谓词层次。当然还有其他一些传统方式不奏效情况下的终极技术。一个要求就是如下的性能调节技术提供给你的catalog以足够的统计,使用统计向导来保证优化器有关于你的数据的精确全景。

DB2性能调节技术

包级别的SQL调优——需要REOPT(ONCE/ALWAYS/AUTO) BIND选项。这个语句通告优化器来在运行时重新优化包中的每个语句,至少ONCE,或者ALWAYS(每次执行),在DB2 9中可以AUTO(需要时)。这项技术的开销由选择的选项和SQL语句的数量及复杂性决定。这些开销在批处理程序中可以忽略不计,但是在短期运行的交易中会有很大影响。在我们的例子中,批处理程序指针只有一个谓词和一个基数为1的主机变量。REOPT是一个调节选项,用来优化非统一列值分布和主机变量内容高可变的情况,是COLCARDF=1的反面。包级别的调节并不合适。

语句级别的调节技术——包括OPTIMIZE FOR n ROWS和FETCH FIRST n ROWS ONLY。这些语句,放在SELECT语句末尾,是在不需要结果集的情况下进行优化的。优化器假设除了这些语句的所有的SELECT语句需要整个结果,这些结果偏向于诸如数序和表预取的访问路径。因为我们的批处理指针一定需要整个结果,因此语句级别的调节也不是合适的技术。

谓词界别的调节技术——包括增加一个假的过滤器(TX.CX=TX.CX)或增加一个空操作到谓词上(+0,-0,/1,*1, CONCAT ‘’)。一个假的过滤器能够通过减少总过滤器因素(表中满足资格的行的比例)改变优化器。这个方法能够改变表连接的顺序,索引选择和连接方法。多个假过滤器是允许的,但是必须在没有引用过的一列上。空操作(no op)能够通过降级一个过滤器从符合到不符合来改变优化器的工作方式,但是只在z/OS上有用,LUW优化器却不受其影响。这个改变也会影响一个表连接序列,索引选择和连接方法。谓词级别的技术可以被一起使用来获取想要的结果。我们例子中的指针对多个谓词级别调节的结合不起反应,因此是采用重武器的时候了。

一些终极调节技术包括使用DISTINCE的表的表达式和其他终极跨查询的块优化方法。这些技术要求手动查询重写。它们强制使得优化器以一个指定顺序的方式执行查询块。使用这些技术视需要终极提醒的,因为他们能把表连接序列,索引选择和连接方法从好改到坏。DISTINCE表表达式强制优化器优先于其他查询块执行圆括号中的查询。如果SELECT DISTINCE中指定的列引用了不同的表,表表达式可以被实例化为唯一的以供排序。我们的批处理指针有一个非优化的连接序列,使用该技术得到如下查询:

SELECT All columns needed FROM ADDR, NAME, (SELECT DISTINCT columns from tables 3 through 7
FROM T3, T4, T5, T6, T7
WHERE join conditions T3 through T7
AND T6.CODE =:hv) AS TEMP
WHERE join conditions for ADDR, NAME and TEMP

这样的查询重写迫使优化器通过T7连接表T3来连接ADDR和NAME。如果关键字DISTINCT在上例中省略了,DB2优化器合并表表达式查询和输出查询,这样就和原来的语句和连接序列一样了。SELECT DISTINCT是一个关键的组件。然而,因为列列表跨越了多个表,临时的5个表连接结果实例为一个唯一的工作文件以供排序。排序的开销平均在每次执行几千行,这是可以忽略的负载。批处理程序现在可以在两分钟之内完成任务了。

更多未来的调节技术

其他的一些查询重写技术从全异的查询块中获取信息,以重写查询。IBM曾经将此技术成为跨查询块优化;DB2 9中被成为全局优化。一个好消息就是这项技术开始在DB2优化器的自我查询重写(QWR)阶段中出现了。所有DB2查询都能使用它也是指日可待了。同时,我们也需要将一些终极方法掌握在自己的手里。


作者:无 来源:无
】【关闭窗口
·上页:
·下页:
·当前位置: 库库中文网 · 数据库类教程 · IBM DB2教程
相关文章
     数据库类教程 - IBM DB2教程
普通教程IBM携DB2 9开启混合型数据库管理
普通教程DB2从AIX server上转移(迁移)到
普通教程DB2数据库代码页不兼容处理办法
普通教程DB2 9和ASP.NET 2.0构建下一代运
普通教程DB2 9中基于字符地字符串函数
普通教程验证DB2数据库备份是否成功
普通教程DB2 Version 9.5 pureXML新增强
普通教程DB2实用程序介绍之EXPORT实用程
普通教程实际示例讲解DB2中地表空间(1)
普通教程DB2 9数据库服务器管理之DB2安全
普通教程导入、装载和导出DB2数据库地数
普通教程运用DB2 pureXML完成动态模型定
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光