DB2的配置体系是分层的,一个实例下可以挂多个数据库,而DB2把参数也按照这个层级拆成了两套:实例级配置dbm cfg(Database Manager Configuration)和数据库级配置db cfg(Database Configuration)。理解这两套配置的边界,是做DB2运维和性能调优的第一步,也是最容易被新手忽视的一步。本文结合实际运维场景,把两者的区别、查看方式以及常用参数的配置方法完整梳理一遍。

一、dbm cfg与db cfg的核心区别
dbm cfg中文叫数据库管理器配置,它挂载在实例级别。一个实例对应一个dbm cfg,这个实例下的所有数据库共享这份配置。它管的是全局性的东西,比如实例的总内存上限、通信端口、并发代理数量、联邦数据库支持等。换句话说,只要一个参数影响的是实例层面所有数据库的行为,那它大概率就在dbm cfg里。
db cfg则是数据库级别的配置,每个数据库独立一份,互不影响。比如A库的日志大小和B库的日志大小可以完全不同,因为日志、排序堆、锁相关参数都是跟着具体数据库走的。这一点在多数据库共用一个实例的环境里尤其重要:如果你把本该改在db cfg的参数改到了dbm cfg,可能会导致其他数据库出现意外的行为变化。
简单记一个判断口诀:影响所有数据库的改dbm cfg,只影响单个数据库的改db cfg。比如MAX_QUERYDEGREE(并行度上限)在dbm cfg层,因为它约束的是整个实例的并行能力;而LOCKLIST(锁内存大小)在db cfg层,因为锁是数据库内部的事务行为。
二、两套配置的查看与修改操作
先说查看。dbm cfg用GET DBM CFG SHOW DETAIL命令查看,db cfg用GET DB CFG FOR 数据库名 SHOW DETAIL查看。加上SHOW DETAIL关键字后,输出会多一列,显示每个参数的延迟生效值,这在排查“为什么改了参数没生效”这类问题时非常关键。
-- 查看实例级配置 db2 GET DBM CFG SHOW DETAIL -- 查看数据库级配置,需要先连接或指定库名 db2 GET DB CFG FOR SAMPLE SHOW DETAIL
修改命令分别是UPDATE DBM CFG和UPDATE DB CFG FOR 库名。要注意的是,很多参数修改后不会立即生效,命令输出里会提示This parameter is static and will not take effect until the next db2stop/db2start。对于这类静态参数,dbm cfg需要重启实例,db cfg需要重新激活数据库(先deactivate再activate,或者断开所有连接后重新连接)。
-- 修改实例最大代理数,静态参数,需重启实例 db2 UPDATE DBM CFG USING MAXAGENTS 2000 -- 修改数据库应用堆大小,动态参数,立即生效 db2 UPDATE DB CFG FOR SAMPLE USING APPLHEAPSZ 4096 -- 查看参数是否静态 db2 GET DB CFG FOR SAMPLE | grep -i applheapsz
建议养成一个习惯:改完参数后立刻用SHOW DETAIL确认两列值是否一致。如果MEMORY_VALUE和DEFERRED_VALUE不一致,说明当前还是旧值在生效,别急着下结论说调优没效果。
三、常用参数配置思路与注意事项
dbm cfg里最常动的是内存和并发相关参数。INSTANCE_MEMORY控制实例总内存,默认AUTOMATIC自动管理,一般不建议手动改小;MAX_COORDINATORS和MAX_CONNECTIONS在高并发连接场景需要评估,连接数上不去往往就是这两个参数卡住了。另外svcename(服务名或端口号)也是dbm cfg里的,配置TCP/IP通信时别忘了检查它。
db cfg侧重点在数据库内部行为。LOGFILSIZ和LOGPRIMARY、LOGSECOND决定事务日志容量,大批量导入时报SQL0964C日志满,基本就是调这三个参数;LOCKLIST和MAXLOCKS影响锁升级行为,出现锁等待严重的情况要结合监控数据评估;SORTHEAP和SHEAPTHRES_SHR与排序性能直接相关,但调大时要当心总内存占用,别把BufferPool的空间挤掉了。
-- 日志相关:主日志20个,每个4096页,辅助日志40个 db2 UPDATE DB CFG FOR SAMPLE USING LOGFILSIZ 4096 LOGPRIMARY 20 LOGSECOND 40 -- 锁内存:锁列表页数与单个应用最大锁占比 db2 UPDATE DB CFG FOR SAMPLE USING LOCKLIST AUTOMATIC MAXLOCKS 60 -- 使静态参数生效 db2 DEACTIVATE DB SAMPLE db2 ACTIVATE DB SAMPLE
最后提醒一点:生产环境改参数前先备份当前配置,直接db2 GET DBM CFG > dbm_backup.txt导出留存即可。改参数的原则是一次只改一个、观察一段时间再改下一个,否则出了问题根本分不清是哪个参数引起的。另外9.7以后的版本大部分内存参数支持AUTOMATIC自动调优,除非有明确的监控证据,否则优先让DB2自己管,手工硬编码反而容易造成资源分配失衡。