sheapthres_shr -“共享排序的排序堆阈值”配置参数

此参数表示针对可用于基于排序堆的操作的共享排序内存预留总量的软限制。

配置类型
数据库
参数类型
  • 可联机配置(需要数据库连接)
  • 可按成员配置 Db2 pureScale® 环境和分区数据库环境中可按成员配置。
传播类
立即
缺省值 [范围]
32 位平台
自动 [250 - 524 288 ]
缺省设置为 5000。
64 位平台
AUTOMATIC [250 - 2 147 483 647]
缺省设置为 5000。
注意: 默认值可由配置顾问在创建数据库时更改。 Db2® 配置顾问作为数据库创建的一部分进行更改,数据库创建默认在非分区数据库环境中运行。 除非设置了 DB2_WORKLOAD=ANALYTICS,否则 Db2 配置顾问程序会将 sheapthres_shr 参数的值设置为 AUTOMATIC
计量单位
页 (4 KB)
AUTOMATIC

AUTOMATIC 设置用于启用 sheapthres_shr 参数的自调优,即,允许 STMM 在工作负载需求更改时动态调整可用的共享排序内存总大小。 仅在缺省 共享排序内存模型SELF_TUNING_MEM = ON下有效。 否则,底层已配置值反映固定值。

启用 sheapthres_shr 参数的自调优后,手动更新底层已配置值的任何尝试都是临时的,因为此设置仍由 STMM 调整。

如果 wlm_admission_ctrl confiugraion 参数设置为 YES ,那么无法在 sheapthres_shr 配置参数上指定 AUTOMATIC 设置。 如果尝试这样做,那么将返回内容为 SQL1668N RC=12 的 sqlcode。

虽然可以在 sheapthres_shr 参数设置为固定值时对 sortheap 配置参数启用自调整,但如果 sheapthres_shr 参数设置为 AUTOMATIC,那么 sortheap 无法设置为固定值。 sheapthres_shr 更新为 AUTOMATIC 时,sortheap 参数也会更新为 AUTOMATIC 设置。 当 sheapthres_shr 参数设置为 AUTOMATIC 时,任何将 sortheap 参数更新为固定值的尝试都将失败,并返回错误消息。

设置为 AUTOMATIC 时,将启用 sheapthres_shr 的 STMM 自调优以符合其他配置需求。 必须符合以下条件才允许进行 sheapthres_shr 的自调优:
  • 已启用 STMM (SELF_TUNING_MEM=ON)。
  • 已启用 共享排序内存模型 (sheapthres 设置为 0)。
  • sortheap 参数设置为 AUTOMATIC
  • 未设置 DB2_WORKLOAD=analytics
  • 对于分区数据库环境,数据库已显式激活。

不支持对访问按列组织的表的工作负载进行 sort 参数的自调优,并且会在 DB2_WORKLOAD =ANALYTICS 时禁用此自调优。 在此类情况下,将 sheapthres_shr 参数的值设置为固定值而不是 AUTOMATIC,否则,可能会降低性能或出现内存不足的情况。 DB2_WORKLOAD 注册表变量的值设置为 ANALYTICS 时,无法将 sheapthres_shr 参数设置为 AUTOMATIC,且 DB2 配置顾问程序会自动配置 sheapthres_shr 参数的固定值。

各种运行时操作(包括技术上不是排序操作的那些运行时操作)会根据 sortheap 设置分配工作内存。 以下操作根据 sortheap 设置分配工作内存:
  • 排序
  • 散列连接
  • 索引 AND 运算
  • 块索引 AND 运算
  • 内存中的表
  • 合并连接
  • 标量聚集
  • 部分提前相异运算和提前聚集运算
  • 表队列
  • 散列 GROUP BY
  • 按列组织的数据处理

sortheap 参数设置计算每个运算的最大内存使用量,sheapthres_shr 参数设置计算对每个数据库每个成员的排序内存使用者可用的整体内存。 sheapthres_shr 参数计算可用整体内存,方法是在数据库上的所有活动请求的总预留量达到 sheapthres_shr 值时减少允许的排序预留量。 如果所请求总预留量达到 sheapthres_shr 值,那么只允许最低预留量,并且性能可能下降。 如果总预留量达到 sheapthres_shr 值的 1.25 倍,那么针对排序内存的请求可能被拒绝并且会向应用程序返回错误 (SQL0955C)。

有三个可行排序内存模型。 所使用模型取决于配置中的元素数目。
共享排序内存模型
共享排序内存模型是缺省模型,每当 sheapthres = 0 时生效。 sheapthres 设置计算专用排序模型的调整,设置 0 将禁用专用排序内存。 在共享排序模型下,所有 sortheap 分配都来自共享排序堆 (sheapthres_shr) ,这是数据库共享内存 (database_memory) 的一部分。 共享排序内存模型是唯一可以进行 sortheapsheapthres_shr 的 STMM 调整的模型。
专用排序内存模型
每当 sheapthres 不等于零并且配置未启用共享排序内存时,专用排序内存模型生效。 在专用排序内存模型下,sortheap 分配仅从专用内存进行。 只需要共享排序内存的操作无效并且返回错误。 在此模型下,不会进行 STMM 排序调整。
混合排序内存模型
每当 sheapthres 不等于零但配置指示共享排序内存对某些操作可用时,混合排序内存模型生效。 不需要共享排序内存的操作是从专用内存分配的。 在此模型下,不会进行 STMM 排序调整。
下列任一配置设置都可启用共享排序内存:
  • 已启用内部并行性 (INTRA_PARALLEL = YES)
  • 已启用连接集中器 (MAX_CONNECTIONS > MAX_COORDAGENTS)
  • DB2_WORKLOAD=ANALYTICS
如果未启用共享排序内存,那么共享排序内存模型和混合排序内存模型不生效并且以下操作失败:
  • 将数据装入至 XML 表
  • 列组织查询处理
  • 请求内部并行处理的应用程序
如果先前列表中的任何操作失败,请通过完成下列所有步骤启用共享排序内存模型:
  • sheapthres 配置参数设置为 0。
  • 重新启动 Db2 实例。 要重新启动 Db2 实例,请运行 db2stop 命令,后跟 db2start 命令。
  • sheapthres_shr 参数进行相应配置。

监视

有许多监视元素可用。

对于常规监视,可使用以下监视元素:
  • ACTIVE_SORTS
  • TOTAL_SECTION_SORT_TIME
  • TOTAL_SECTION_SORT_PROC_TIME
  • TOTAL_SECTION_SORTS
  • TOTAL_SORTS
对于受约束总排序内存配置的监视,可使用以下监视元素:
  • POST_THRESHOLD_SORTS(用于共享排序)
  • POST_THRESHOLD_PEDS
  • POST_THRESHOLD_PEAS
  • POST_SHRTHRESHOLD_HASH_JOINS(用于共享排序)
  • POST_THRESHOLD_HASH_GRPBYS
  • POST_THRESHOLD_OLAP_FUNCS
  • SORT_OVERFLOWS
  • TQ_SORT_HEAP_REJECTIONS
  • SORT_HEAP_ALLOCATED(共享排序预留量)
  • SORT_SHRHEAP_TOP(共享排序预留量的上限)

SORT_HEAP_ALLOCATED 和 SORT_SHRHEAP_ALLOCATED 监视元素反映预留量请求,而不是分配的实际内存量。 通常操作不会完全分配全部的所请求预留量。

对于共享排序预留量级别的监视,请使用 MON_GET_DATABASE 例程。 以下示例显示可用于监视共享排序预留量级别的查询:
select SORT_SHRHEAP_ALLOCATED, SORT_SHRHEAP_TOP from table (MON_GET_DATABASE (null))
此查询返回内存预留量级别(以 4K 为单位):
SORT_SHRHEAP_ALLOCATED SORT_SHRHEAP_TOP   
---------------------- -------------------- 
                128411               396405
对于共享排序内存使用量的监视,请使用 MON_GET_MEMORY_POOL 例程。 以下示例显示可用于监视共享排序内存使用量的查询:
select memory_pool_used, memory_pool_used_hwm 
from table (mon_get_memory_pool(null,null,null)) 
where memory_pool_type='SHARED_SORT'
此查询返回共享排序的内存分配级别(以 1K 为单位):
MEMORY_POOL_USED  MEMORY_POOL_USED_HWM
----------------- --------------------
           140574               140574
单个数据库上运行的所有应用程序只有一个共享排序内存池。