DB2 配置顾问的核心入口是SYSPROC.AUTOCONFIGURE存储过程。它并不是简单套用一组固定模板,而是根据管理员输入的物理内存百分比、预期表数量与 SQL 语句数量,结合当前数据库的运行统计信息,计算出一组相互匹配的配置参数。这意味着同样是 8GB 内存的实例,跑在线交易和跑报表分析,配置顾问给出的缓冲池大小与排序堆设置会有明显差异。

一、配置顾问解决的调参矛盾
DB2 的配置参数之间存在强耦合。比如把BUFFPAGE调高能提升缓存命中率,但如果物理内存被缓冲池占满,排序操作可能频繁溢出到临时表空间,反而拖慢复杂查询。手工调参往往需要反复实验,配置顾问则把这种权衡交给内部代价模型处理。
配置顾问会读取当前数据库的统计信息和负载特征,再结合管理员提供的物理内存百分比、预期表数量、预期 SQL 语句数量,推算出能够同时覆盖事务访问和后台维护的内存结构。这里的关键在于它不是孤立地计算每个参数,而是把缓冲池、排序堆、锁列表、包缓存、目录缓存等作为一个整体来估算。
实际测试中,如果只把SORTHEAP调大而不调整SHEAPTHRES,多个并发排序仍可能被限制在共享排序阈值内。配置顾问会同时调整这两项,降低排序溢出概率。这就是自动计算相对零散手工调整的主要优势。
二、AUTOCONFIGURE命令的参数与执行
配置顾问通过存储过程SYSPROC.AUTOCONFIGURE调用。它的常用签名包含八个参数:操作关键字、物理内存百分比、预期表数量、预期SQL语句数量、管理优先级、数据库名、用户名和密码。操作关键字通常使用APPLY_DB ONLY表示只生成建议报告,APPLY_DB AND ADMIN表示同时把配置应用到数据库和数据库管理器。
下面是在命令行环境中生成建议报告的示例:
-- 连接到目标数据库
CONNECT TO sample;
-- 只生成配置建议,不实际修改
CALL SYSPROC.AUTOCONFIGURE('APPLY_DB ONLY', 75, 50, 40, 0, NULL, NULL, NULL);
CONNECT RESET;
如果希望在测试环境直接看效果,可以把关键字换成APPLY_DB AND ADMIN。为了方便观察前后差异,建议先在调用前执行GET DATABASE CONFIGURATION保存当前值,调用后再执行一次,对比缓冲池大小、排序堆、锁列表等关键项的变化。
物理内存百分比参数percent需要慎重设置。它指的是数据库实例可以使用的物理内存上限占比,而不是整机只给DB2使用。例如某服务器还运行中间件和监控代理,把该值设成90%可能导致操作系统频繁换页。通常建议在专用数据库服务器上设为75%到85%,混合负载环境则降到50%左右。
三、如何解读建议报告并做人工复核
执行APPLY_DB ONLY后,控制台会输出一份文本报告,包含建议前的值和建议后的值。重点看BUFFPAGE、SORTHEAP、LOCKLIST、MAXLOCKS、PCKCACHESZ等参数。报告还会估算配置后的内存总占用,管理员需要确认这个数字没有超过操作系统可用内存。
不建议拿到建议值就直接在正式库上应用。配置顾问依赖数据库运行统计信息和输入估算值,如果输入的表数量与SQL语句数量偏离真实业务较多,建议值也可能偏差。比如一次促销活动期间临时表数量激增,配置顾问按平时规模计算出的目录缓存和锁列表就可能不够用。
更稳妥的做法是在测试库上用生产环境近期的备份还原数据,先执行AUTOCONFIGURE生成建议,再跑一轮典型业务脚本。观察缓冲池命中率、排序溢出次数、锁等待时间和事务吞吐量。如果关键指标没有明显改善甚至回退,说明当前负载不在配置顾问的理想适用范围,需要保留原有参数或只采纳部分建议。
四、不同工作负载下的调优边界
配置顾问允许通过管理优先级参数影响优化方向。该值为0时偏向性能,适合大多数在线交易场景;为1时偏向恢复能力,会预留更多日志相关资源;为2则尝试在性能和恢复之间平衡。对于典型的OLTP系统,配置顾问倾向于把内存分配给缓冲池和包缓存,减少物理读以及SQL编译开销;排序堆和哈希连接内存则保持相对克制,因为小额事务很少触发大规模排序。
OLAP场景正好相反。报表与复杂查询经常需要大量排序、哈希连接和临时表空间。此时配置顾问会建议更大的SORTHEAP和SHEAPTHRES,并可能调整STMTHEAP以容纳更复杂的访问计划。如果管理员强制把内存参数向OLTP方向设置,报表查询可能频繁出现排序溢出,响应时间显著增加。
需要明确的是,配置顾问不能替代索引设计、SQL改写和表结构优化。它只能让数据库参数在现有访问模式下尽量合理。如果某条SQL因为缺少索引而进行全表扫描,把缓冲池再增大也改变不了扫描成本。遇到性能问题时,应当先通过EXPLAIN和db2pd定位瓶颈,再用配置顾问调整基础参数,这样效果更可靠。