堆(SORTHEAP) 参数,是定义要用于专用排序的专用内存页的最大数目或要用于共享排序的共享内存页的最大数目。当排序完成时,如果排序为专用排序,那么此参数将影响代理程序专用内存。如果排序为共享排序,那么此参数将影响数据库共享内存。每个排序都有一个独立的排序堆,该排序堆由数据库管理器根据需要分配。此排序堆是将数据排序的区域。如果由优化器定向,那么将使用优化器提供的信息分配一个比此参数指定的排序堆小的排序堆。当此参数设置为 AUTOMATIC 时,就启用了自调整功能。这允许内存调整器根据工作负载需求变化动态地调整此参数控制的内存区大小。当使用排序堆时,应该考虑下列事项:
•适当的索引可使排序堆的使用减至最小程度。
•散列连接缓冲区、块索引 AND 运算、合并连接、内存中的表以及动态位映射(用于索引 AND 运算和星型连接)使用排序堆内存。在使用这些技术时,增大此参数的大小。
•当需要进行频繁的大型排序时,增大此参数的大小。
•当增大此参数的值时,应该检查是否还需要调整数据库管理器配置文件中的 sheapthres 和 sheapthres_shr 参数。
•排序堆大小由优化器在确定访问路径时使用。在更改此参数后,应考虑重新绑定应用程序(使用 REBIND 命令)。
清单2中所示的数据库共享内存大小 (DATABASE_MEMORY)参数,是用来设置对每个数据库将使用的内存量的限制。在 DB2® V9.1 中,database_memory 配置参数的 COMPUTED 设置等价于 DB2 UDB V8 AUTOMATIC 设置。如果要保留 DB2 V8 行为,则将 database_memory 参数设置为 COMPUTED。在 DB2 V9.1 中,将 database_memory 参数设置为 AUTOMATIC 会启用新增的自调整内存管理功能部件,它可自动调整数据库内存使用。调整器在 database_memory 配置参数定义的内存限制范围内工作。在 Windows® 和 AIX® 上,database_memory 值本身可以自动调整。database_memory 启用自调整(设置为 AUTOMATIC)后,调整器确定数据库的整体内存需求并根据当前数据库需求增大或减小分配给数据库共享内存的内存量。例如,如果当前数据库需求很高,并且系统上有足够的可用内存,则数据库共享内存将消耗较多的内存。当数据库内存需求下降时,或者当系统上的可用内存量降至过低水平时,就会释放一些数据库共享内存。database_memory 参数未启用自调整(未设置为 AUTOMATIC)时,整个数据库都将使用指定的内存量,从而根据需要在数据库内存使用者之间分配内存。database_memory 未启用自调整时,可以通过两种方法指定数据库使用的内存量:将 database_memory 设置为数值或者将其设置为 COMPUTED。在第二种情况下,总内存量是根据数据库启动时的数据库内存堆初始值总计而计算的。一定要注意:database_memory 的 AUTOMATIC 设置仅在 AIX® 和 Windows® 操作系统上受支持。在其他平台上,database_memory 的缺省值是 COMPUTED。
接下来我们查看一下默认创建的4K页缓冲池IBMDEFAULTBP的自调整设置,具体如清单3所示:
--清单 3. 查看默认创建的4K页缓冲池IBMDEFAULTBP的自调整设置C:\>db2 connect to mydb1数据库连接信息数据库服务器 = DB2/NT 9.1.0SQL 授权标识 = RHETTE本地数据库别名 = MYDB1C:\>db2 "select BPNAME, NPAGES from sysibm.sysbufferpools"BPNAME NPAGES------------------------------------------------ -----------IBMDEFAULTBP -21 条记录已选择。
当缓冲池启用了自调整功能时,该特定缓冲池的 sysibm.sysbuff