使用db2look 重新创建优化器访问计划
时间:2007-12-23 来源:不详 作者:迈克DB
在作为DB2UDB支持分析员(SupportAnalyst)工作时,我经常从处理优化器或查询计划问题的客户那里听到下列问题:
“我如何在接手生产环境的测试环境中重新创建相同的查询访问计划呢?”
我们经常需要将生产环境复制到测试环境中,包括为查询分析目的重新创建相同的访问计划。
例如,在生产中,您可能会碰到使用糟糕访问计划的查询所导致的性能问题,并且需要在测试系统上复制该访问计划以尝试一些不同的策略,例如操作统计数据,修改优化级别,对DB2注册表变量尝试不同的设置等等,以便提高性能。
在理想的世界中,您需要让测试环境尽可能接近地匹配生产。也就是说,您需要在两个环境中使用完全相同的硬件、操作系统维护级别和配置、DB2级别和配置,以及在测试中使用与生产中相同的数据。然而,并非总是可以达到这种理想情况。假如生产环境具有极其大量的数据,您或许就没有容量来保存生产系统的测试副本。
db2look实用程序可以用于达到该目标,即使您无法复制所有的生产细节。
本文将解释如何可以在测试系统上模拟生产系统,而无需真正的数据来重新创建查询计划问题。该功能将帮助您调试查询和理解访问计划问题,且不打断生产环境中的工作。但是请注重,假如需要测试结果访问计划的执行,则仍然需要将尽可能多的数据从生产环境装入测试环境。测试系统和生产系统之间的差别仍然总是可能足以导致测试上的执行特性不匹配生产上的。这部分的分析(性能调优)既是一门科学,又是一门艺术。
织梦内容管理系统
优化器或查询编译器领域中的其他问题,例如SQL0901N错误或实例崩溃,也可以使用本文中所解释的方法来重新创建。您可以尝试各种策略,如测试最新的补丁包(假如系统是处于更老的补丁级别),尝试不同的优化级别、不同的注册表变量等等,以便查看这些修改是否将解决问题。
让我们看一看db2look中用于达到该目标的选项。
db2look命令及其选项
下面是用于从生产系统捕捉所需信息的命令:
清单1.重新创建优化器问题的命令
db2look-d<dbname>-l-ostorage.out
db2look-d<dbname>-f-fd-oconfig.out
db2look-d<dbname>-e-a-m-odb2look.out
db2look-d<dbname>-e-a-m-ttable1table2....tableX-otable.ddl
现在,让我们更具体地看一看这些db2look命令选项。
生成缓冲池、表空间和数据库分区组信息
db2look-d<dbname>-l-ostorage.out
下面是对以上db2look命令中所用选项的描述:
-d:数据库名——该选项必须指定。
-l:生成数据库布局。这是用于数据库分区组、缓冲池和表空间的布局。
-o:将输出重新定向到给定的文件名。假如未指定-o选项,然么输出将为标准输出(stdout),通常是输出到屏幕。
内容来自dedecms
-l选项对于模拟生产环境十分重要。理想情况下,您需要具有相同的缓冲池、数据库分区组(假如处于多分区环境中)和表空间信息(包括临时表空间)。但是,假如您受到了内存约束,无法分配生产中所具有的大型缓冲池,那么就使用db2fopt命令。我稍后将在本小节中更具体地讨论该命令。
并非总是可以在测试中设置与生产中相同的表空间。例如,可能设置了大型设备,却无法灵活地在测试中创建相同的设备大小。或者,可能根本无法在测试环境中获得单独的表空间设备。此外,或许无法在测试中设置与生产中相同的路径。需要适当地更改路径、设备和文件以适应测试环境。
下面是优化器为表空间所使用的重要信息。这就是您需要确保在测试和生产中相同的信息。(注重:这里所展示的数字是一个例子。您应在测试中使用与您生产中相同的设置。)
PREFETCHSIZE16
EXTENTSIZE16
OVERHEAD12.670000
TRANSFERRATE0.180000
假如生产中表空间是“由数据库治理的”,那么在测试中也应该是“由数据库治理的”。假如它在生产中是“由系统治理的”,那在测试中也应该是这样的方式。
文章评论
共有位Admini5网友发表了评论 查看完整内容