由于查询通常需要经过排序或分组的结果,因此正确地配置排序堆对于良好的查询性能而言至关重要。
在下列情况下,需要进行排序:
- 不存在能够满足所请求顺序的索引(例如,使用了 ORDER BY 子句的 SELECT 语句)
- 存在索引,但执行排序比使用索引更有效
- 创建索引
- 删除索引,这将导致对索引页号进行排序
影响排序的元素
尽管可以完全在排序内存中执行排序,但这可能会导致过度进行页交换。在这种情况下,将失去大型排序堆的优势。因此,每当您调整排序配置参数时,应该使用操作系统监视器来跟踪系统页面调度方面的任何变化。
用于管理排序性能的技术
确定排序对性能产生重大影响的特定应用程序和语句:
- 在应用程序级别和语句级别设置事件监视器,以帮助您确定排序总时间最长的应用程序。
- 对于其中的每个应用程序,查找排序总时间最长的语句。
您也可以搜索说明表,以确定执行了排序操作的查询。
- 使用这些语句作为设计顾问程序的输入,该程序将标识索引并可创建索引以减少排序需求。
可以使用自调整内存管理器(STMM)自动根据需要动态地分配和取消分配排序所需的内存资源。要使用此功能:
- 通过将 self_tuning_mem 配置参数设为 ON,对数据库启用自调整内存功能。
- 将 sortheap 和 sheapthres_shr 配置参数设为 AUTOMATIC。
- 将 sheapthres 配置参数设为 0。
您还可以使用数据库系统监视器和基准程序测试技术来帮助设置
sortheap、
sheapthres_shr
和
sheapthres 配置参数。对于每个数据库管理器以及每个数据库:
- 设置并运行一个典型的工作负载。
- 对于每个适用的数据库,收集下列性能变量在基准程序工作负载周期内的平均值:
- 使用中排序堆总大小(sort_heap_allocated 监视器元素的值)
- 活动排序次数和活动散列连接数(active_sorts 和 active_hash_joins
监视器元素的值)
- 将 sortheap 设为每个数据库的平均使用中排序堆总大小。
注: 如果将长键用于排序,那么可能需要增大 sortheap 配置参数的值。
- 设置 sheapthres。要估算适当的大小:
- 确定实例中哪个数据库的 sortheap 值最大。
- 确定此数据库的排序堆的平均大小。
如果太难以确定,那么使用最大排序堆大小的 80%。
- 将 sheapthres 设置为平均活动排序次数乘以上面计算的平均排序堆大小。这是建议的初始设置。以后,您可以使用基准测试技术来优化此值。
IBM® InfoSphere® Optim™ Query
Workload Tuner 提供的工具可提高单个 SQL 语句和 SQL 语句组(它们称为查询工作负载)的性能。有关此产品的更多信息,请参阅产品概述页。在 V3.1.1 或更高版本中,还可以使用工作负载设计顾问程序来执行在“DB2® 设计顾问程序”向导中可用的许多操作。有关更多信息,请参阅工作负载设计顾问程序的文档,网址为:http://pic.dhe.ibm.com/infocenter/dstudio/v4r1/topic/com.ibm.datatools.qrytune.workloadtunedb2luw.doc/topics/genrecsdsgn.html。