使用DB2look 重新创建优化器访问计划(2)
2007-07-31 16:23:32 来源:WEB开发网您应将之设置为与生产中相同的值。同样,通过在 db2look 中使用 -fd 选项,您将注意到:
!db2fopt SAMPLE update opt_sortheap 256;
这将重写 sortheap 配置参数,优化器也将之用作 sortheap 值。同样,在运行时真正分配的排序堆(sortheap)实际上将由数据库配置中的 sortheap 设置来决定。与 opt_buffpage 相同,如果您无法在测试系统上分配与生产系统上相同大小的排序堆(sortheap),那么可以使用 opt_sortheap。
数据库堆大小(DBHEAP):
每个数据库都有一个数据库堆,数据库管理器使用它来代表连接到数据库上的所有应用程序。 它包含表、索引、表空间和缓冲池的控制块信息。
锁列表大小(LOCKLIST):
该参数表示分配给锁列表的存储器大小。
最大锁列表(MAXLOCKS):
该参数定义数据库管理器执行升级之前必须填入的应用程序所占有锁列表的百分比。
locklist 和 maxlocks 将帮助确定某扫描(索引扫描或表扫描)期间将持有的锁类型,以及隔离级别。例如,您将在计划中注意到(比如说)索引扫描操作:
IXSCAN: (Index Scan)
TABLOCK : (Table Lock intent)
INTENT SHARE
注意:如果测试系统的 db2exfmt 输出中的可用锁(Locks Available)与生产系统不同,就不要进行连接 —— 该差异不影响查询计划。
平均应用程序(AVG_APPLS):
SQL 优化器使用该参数来帮助评估在运行时有多少缓冲池可用于所选择的访问计划中(因为连接到数据库的所有活动应用程序共享缓冲池)。
优化级别(DFT_QUERYOPT):
查询优化类用于在编译 SQL 查询时指导优化器使用不同的优化级别。
查询深度(DFT_DEGREE):
用于 SQL 语句的分区内部并行程度。如果设置为 ANY,优化器就对联机的实际 CPU 数目敏感。如果您使用 ANY,那么就应该将测试和生产系统上的 CPU 数目配置得相同,除非禁用分区内并行(intra_parallel)。
除了以上修改之外,还必须确保其他一些参数都相同。
保留的高频值数目(NUM_FREQVALUES):
该参数允许您指定“高频值(most frequent values)”的数目,当在 RUNSTATS 命令上指定 WITH DISTRIBUTION 选项时,将收集该值。
保留的分位数数目(NUM_QUANTILES):
该参数控制在 RUNSTATS 命令上指定 WITH DISTRIBUTION 选项时将收集的分位数(quantile)数目。
测试系统上的上述两个参数 NUM_FREQVALUES 和 NUM_QUANTILES 必须与生产系统中的相同,以便确保在测试系统上收集与生产中相同数目的频值数目和分位数值。
SQL 语句堆(4KB)(STMTHEAP):
在 SQL 语句的编译期间,语句堆(statement heap)用作 SQL 编译器的工作空间。该参数指定该工作空间的大小。如果测试中的该参数小于生产中的,您就可能会开始看到 SQL0101N 消息,因为缺乏编译查询所需要的语句堆空间。如果没有足够的语句堆用于动态连接枚举,您也可能看到 SQL0437W RC=1,下降为贪婪连接枚举。
更多精彩
赞助商链接