提高排序处理性能

排序操作的性能受多种因素影响,但您可以遵循一些建议,减少I/O争用并尽量减小排序行的大小。

关于本任务

当光标打开时,如果SELECT语句需要排序,就会调用排序操作。 以下因素会影响 Db2 排序处理性能:

  • 排序池大小
  • 输入/输出争用
  • 排序行大小
  • 数据是否已经分类

对于任何启动排序活动的SQL语句, IBM® OMEGAMON® for Db2 Performance Expert on z/OS® SQL活动报告都会提供排序效率的相关信息。

过程

为了尽量减少排序处理对性能的影响,请使用以下任意一种方法:

  • 增加排序池的大小。
    排序池越大,排序效率越高。 为每个并发排序用户分配的最大排序工作区大小取决于您为SRTPOOL子系统参数指定的值。

    要确定最大排序大小的粗略估计值,请使用以下公式:

    32000 × (16 + sort key length + sort data length)

    对于排序键长度和排序数据长度,请使用代表您所运行查询的最大值的值。 要确定这些值,请参考IFCID 96中的 QW0096KL (密钥长度)和 QW0096DL (数据长度)字段,由宏 DSNDQW01 映射。 您也可以通过SQL活动跟踪来确定这些值。

    如果ORDER BY子句中包含的列不在select子句中,则该列应包含在排序数据长度和排序键长度中,如下例所示:
    SELECT C1, C2, C3
     FROM tablex
     ORDER BY C1, C4;

    如果 C1、 C2、 C3 和 C4 的长度均为10字节,则排序池的大小可以按以下方式估算:

    32000 × (16 + 20 + (10 + 10 + 10 + 10)) = 2342000 bytes

    上例中使用的数值包括下表中的项目:

    表 1. 排序池大小示例中使用的值
    属性
    最大排序节点数 32000
    每个节点的容量(以字节为单位) 16
    排序键长度(按 C1、 C4 排序) 20
    排序数据长度(每列长度为10字节) 10+10+10+10
  • 尽量减少物理工作文件I/O路径上的I/O争用,并确保物理工作文件分配在不同的I/O路径和包上,以尽量减少I/O争用。 使用支持并行访问卷(PAV)的磁盘设备是另一种显著减少I/O争用情况的方法。
    当在排序的合并阶段发生 I/O 时,Db2 使用顺序预取将页面放入缓冲池,预取量为 8 页。 然而,如果缓冲池容量不足, Db2 会使用4页或更少的预取量,或者因为可用页面不足而完全禁用预取。
  • 分配超出默认值的额外物理工作文件,并将这些工作文件放入各自的缓冲池中。

    通过隔离工作文件活动,您可以更好地监控和调整排序性能。 它还使 Db2 能够更高效地处理排序,因为这些缓冲区仅用于排序,不会受到其他 Db2 工作的干扰。

  • 增加工作文件的可用空间。
    使用已创建临时表的应用程序会占用工作文件空间,直到发生提交或回滚操作。 (如果光标被定义为“保持”,则数据在提交后仍保持不变。) 如果排序操作与临时表同时存在,您可能需要为工作文件提供更大的空间。

    需要星形连接、物化视图、物化嵌套表表达式、非相关子查询或触发器的应用程序也会使用工作文件。

  • 编写应用程序时,仅对需要排序的列进行排序。
    在计算排序行的大小时,排序键中每个已排序的列都会被计算两次。 排序行数越少,排序池中可容纳的行数就越多。
  • 仅在需要时才选择VARCHAR列。
    长度可变的排序键列(排序数据列除外)会填充到最大长度,以适应排序行的大小。
  • 除非使用稀疏索引访问工作文件,否则将缓冲池顺序窃取阈值(VPSEQT)设置为99%。
    默认值为80%,允许20%的缓冲区处于未使用状态。 99%的值可以防止随机访问的空间映射页面被大量预取覆盖。
  • 增加缓冲池延迟写入阈值(DWQT)或数据集延迟写入阈值(VDWQT)的值。
    如果达到DWQT或VDWQT,则安排写入。 对于使用大量逻辑工作文件的大型排序,即使指定了非常大的缓冲池,也很难避免计划写入。 当您增加 VDWQT 的值时,请注意缓冲区不足的情况,并在缓冲区不足时增加工作文件缓冲池的大小或减少 VDWQT。