DB2 数据库配置参数详解:从 GET DB CFG 看懂内存、日志、锁与自动维护
文章目录25 节
一、这篇文章要解决什么问题
DB2 出现内存占用高、锁等待、日志空间不足、备份无法前滚或 SQL 执行计划异常时,经常会先执行:
# SAMPLEDB 是脱敏后的示例数据库名,使用时替换成现场数据库别名
DB_NAME="SAMPLEDB"
db2 get db cfg for "${DB_NAME}"问题是,GET DB CFG 会一次输出近百个字段。如果只把输出保存下来,却不知道每个字段属于建库属性、运行状态还是可调整参数,后续很容易误判。
本文以一份脱敏后的 DB2 9.7 数据库配置为例,逐项说明这些参数控制什么、当前值意味着什么,以及修改时要注意哪些边界。
本文已做以下脱敏:
- 数据库名统一写成
SAMPLEDB。 - 主机名、IP、业务系统名称和真实实例用户不出现。
- 在线日志、镜像日志和备份目录统一使用变量或占位路径。
- 不包含密码、备份文件名、时间戳和生产容量信息。
二、先学会读 DB CFG 输出
1. AUTOMATIC(数值) 不能照抄括号里的数值
例如:
Size of database shared memory (4KB) (DATABASE_MEMORY) = AUTOMATIC(941860)真正的配置方式是 AUTOMATIC。括号里的 941860 是 DB2 根据当前机器资源和运行状态计算出的当前值。
迁移到另一台机器时,应保留 AUTOMATIC,不能直接写成:
# 错误示例:把一台机器的自动计算结果固定到另一台机器
db2 update db cfg for "${DB_NAME}" using DATABASE_MEMORY 9418602. (4KB) 参数需要换算
计算方式:
实际字节数 = 参数值 × 4 KiB例如 UTIL_HEAP_SZ=524288:
524288 × 4 KiB = 2 GiB3. 输出里不全是可修改参数
DB CFG 输出包含三类信息:
- 建库属性:代码页、字符集、territory、排序序列和默认页大小,通常不能在线修改。
- 配置参数:可以通过
UPDATE DB CFG修改,但部分参数需要数据库重新激活才能生效。 - 状态字段:例如 backup pending、rollforward pending,只表示当前状态,不能把它们当成普通参数修改。
三、当前示例配置的关键结论
在逐项展开前,先把最值得关注的地方列出来:
- 数据库为
GBK / CN / 4 KiB,属于建库属性。 - 已开启归档日志,但第一归档方式是
LOGRETAIN,没有真正的独立归档目录。失活日志可能长期滞留在在线日志区域。 - 单个日志文件约 39.06 MiB,50 个主日志约 1.91 GiB,最多 100 个辅助日志约 3.81 GiB。
- 配置镜像日志后,在线日志和镜像日志会各保存一套。若两个目录位于同一个文件系统,无法防护整个磁盘或逻辑卷故障。
UTIL_HEAP_SZ=2 GiB,在小内存实验机上执行 BACKUP、RESTORE、LOAD、REORG 时需要观察内存压力。LOCKTIMEOUT=-1表示锁可以无限等待。MAXLOCKS=98允许单个应用使用接近整个锁列表后才触发锁升级。- 自动备份和自动清理均关闭,备份文件、恢复历史和归档日志需要人工管理。
- HADR 参数没有配置,数据库角色是普通的
STANDARD。
四、版本、字符集和建库属性
| 输出项 | 示例值 | 作用和影响 |
|---|---|---|
| Database configuration release level | 0x0d00 | DB CFG 文件的内部格式版本,用于 DB2 判断配置结构。它不是性能参数。 |
| Database release level | 0x0d00 | 数据库磁盘格式的发布级别,升级数据库时可能变化,不能手工调整。 |
| Database territory | CN | 建库时指定的区域,影响部分本地化、日期和排序默认行为。 |
| Database code page | 1386 | GBK 对应的 DB2 代码页编号。 |
| Database code set | GBK | 数据库存储字符使用 GBK。客户端使用其他代码页时会发生字符集转换。无法映射的字符可能报错或失真。 |
| Database country/region code | 86 | 与 CN 对应的国家或区域代码。 |
| Database collating sequence | UNIQUE | 决定字符串比较、排序、索引顺序和唯一约束判断。建库后不能普通更换。 |
| ALT_COLLATE | 空 | 没有启用备用排序序列。 |
| Number compatibility | OFF | 没有启用 Oracle 风格 NUMBER 兼容行为。 |
| Varchar2 compatibility | OFF | 没有启用 Oracle VARCHAR2 兼容行为。 |
| Date compatibility | OFF | 没有启用 Oracle DATE 兼容语义。 |
| Database page size | 4096 | 默认页大小为 4 KiB,影响默认缓冲池、表空间、行长度和部分对象容量上限。不能通过普通 DB CFG 改成 8K、16K 或 32K。 |
五、SQL 编译和优化器
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| DYN_QUERY_MGMT | DISABLE | 关闭旧式动态 SQL Query Management/Query Patroller 管理功能,不是禁止执行动态 SQL。 |
| STMT_CONC | OFF | 关闭语句集中器。仅文字常量不同的 SQL 不会自动统一成同一参数化语句,可能增加包缓存条目,但能保留针对具体常量选择执行计划的机会。 |
| DISCOVER_DB | ENABLE | 允许旧式 DB2 Discovery 机制发现数据库。直接按主机、端口和数据库名连接不依赖它。 |
| Restrict access | NO | 数据库未处于受限访问模式,拥有正常 CONNECT 权限的用户可以连接。这一行主要反映状态。 |
| DFT_QUERYOPT | 5 | 默认优化级别。5 在 SQL 编译时间和执行计划质量之间做平衡。 |
| DFT_DEGREE | 1 | 默认查询并行度为 1,即默认串行执行。实例级 INTRA_PARALLEL 也会影响并行能力。 |
| DFT_SQLMATHWARN | NO | 算术异常不会只记录警告后继续,相关 SQL 通常会失败。 |
| DFT_REFRESH_AGE | 0 | 默认不允许优化器使用过期的 MQT 数据。 |
| DFT_MTTB_TYPES | SYSTEM | 优化器按系统默认规则决定可使用哪些 maintained table/MQT 类型。 |
| NUM_FREQVALUES | 10 | RUNSTATS 默认保存前 10 个高频值,帮助优化器识别数据倾斜。 |
| NUM_QUANTILES | 20 | RUNSTATS 默认保存 20 个分位点,帮助估算范围条件的选择率。 |
| DECFLT_ROUNDING | ROUND_HALF_EVEN | 十进制浮点采用“银行家舍入”,中间值向偶数舍入,降低大量累计计算的系统性偏差。 |
六、备份、恢复和一致性状态
这些是状态字段,不是普通调优参数。
| 状态项 | 示例值 | 含义 |
|---|---|---|
| Backup pending | NO | 当前不要求先做备份,数据库可以正常使用。从循环日志切换到归档日志后通常会变成 YES,首次完整备份后清除。 |
| All committed transactions have been written to disk | NO | 可能仍有已提交数据页停留在缓冲池中。它不代表已提交事务会丢失,事务日志仍保证持久性,异常后可通过崩溃恢复重做。 |
| Rollforward pending | NO | 数据库没有等待前滚恢复。 |
| Restore pending | NO | 数据库没有处于尚未完成的 RESTORE 状态。 |
| Multi-page file allocation enabled | YES | DB2 可以批量分配多个页面或 extent,减少大量页面扩展时的分配开销。 |
| Log retain for recovery status | RECOVERY | 数据库处于支持前滚恢复的归档日志模式。 |
| User exit for logging status | NO | 没有使用旧式日志 user exit 程序。 |
七、数据库内存
| 参数 | 示例值 | 约算 | 作用和影响 |
|---|---|---|---|
| SELF_TUNING_MEM | ON | — | 开启 STMM。DB2 可以在数据库内存、缓冲池、包缓存和排序堆等自动参数之间调整资源。 |
| DATABASE_MEMORY | AUTOMATIC(941860) | 当前约 3.59 GiB | 数据库共享内存总预算。配置是 AUTOMATIC,括号内只是当前运行值。 |
| DB_MEM_THRESH | 10 | 10% | 数据库内存管理的安全余量或阈值,为可能临时超出目标的内存消费者保留空间。 |
| LOCKLIST | 19328 | 约 75.5 MiB | 整个数据库的锁列表内存。大事务持有大量行锁时会消耗它。 |
| MAXLOCKS | 98 | 98% | 单个应用使用锁列表达到该比例时尝试锁升级。98 很高,减少锁升级,但可能让单个大事务占用几乎全部锁内存。 |
| PCKCACHESZ | AUTOMATIC(5110) | 当前约 20 MiB | 包缓存保存已编译 SQL section、静态包和动态 SQL 执行计划。过小会增加重新编译。 |
| SHEAPTHRES_SHR | AUTOMATIC(23320) | 当前约 91.1 MiB | 所有共享排序共同使用的总排序内存阈值。 |
| SORTHEAP | AUTOMATIC(1166) | 当前约 4.55 MiB/排序 | 单个排序、哈希连接和分组操作的工作区目标。空间不足时会产生临时表空间 I/O。 |
| DBHEAP | AUTOMATIC(2614) | 当前约 10.2 MiB | 保存数据库级控制块、目录和内部结构。 |
| CATALOGCACHE_SZ | 300 | 约 1.17 MiB | 缓存表、索引、权限和包等系统目录信息。 |
| LOGBUFSZ | 256 | 1 MiB | 事务日志写入日志文件前的内存缓冲。 |
| UTIL_HEAP_SZ | 524288 | 2 GiB | BACKUP、RESTORE、LOAD、REORG 等工具使用的工具堆上限。小内存机器要特别关注。 |
| BUFFPAGE | 1000 | 约 3.9 MiB | 旧式默认缓冲池页数参数。真实缓冲池大小应查询 SYSCAT.BUFFERPOOLS,不能只看这里。 |
| STMTHEAP | AUTOMATIC(8192) | 当前约 32 MiB/语句 | SQL 编译器和优化器处理单条复杂 SQL 时使用的内存。 |
| APPLHEAPSZ | AUTOMATIC(256) | 当前约 1 MiB | 每个应用的控制信息、游标等使用的应用堆目标。 |
| APPL_MEMORY | AUTOMATIC(40000) | 当前约 156.25 MiB/应用内存集 | 单个应用相关内存消费者的总体预算。 |
| STAT_HEAP_SZ | AUTOMATIC(4384) | 当前约 17.1 MiB | RUNSTATS 和统计信息处理使用的内存。 |
八、锁和死锁
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| DLCHKTIME | 10000 ms | 每 10 秒检查一次死锁。值越小发现死锁越快,但检测开销会略有增加。 |
| LOCKTIMEOUT | -1 | 锁等待没有超时限制,会一直等待锁释放、发生死锁或连接被中断。故障表现经常是 SQL 长时间没有返回。 |
排查锁问题时可以使用:
# 查看应用连接,重点确认 Application Handle、状态和数据库名
db2 list applications show detail
# 查看锁持有和等待关系
db2pd -db "${DB_NAME}" -locks九、页面清理、预取和 I/O
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| CHNGPGS_THRESH | 80 | 缓冲池脏页达到相应阈值时推动异步页面清理。80 较高,可能在检查点或内存压力时集中写盘。 |
| NUM_IOCLEANERS | AUTOMATIC(3) | 异步页面清理线程数,括号内是 DB2 当前自动计算值。 |
| NUM_IOSERVERS | AUTOMATIC(3) | 异步 I/O 和预取服务器数,顺序扫描和预取会使用它们。 |
| INDEXSORT | YES | 创建索引时允许先排序索引键再构建,通常效率更高,但会使用排序内存和临时空间。 |
| SEQDETECT | YES | 自动识别顺序访问并触发预取,减少大范围扫描的同步磁盘等待。 |
| DFT_PREFETCH_SZ | AUTOMATIC | 新建表空间未单独设置时,由 DB2 根据容器、extent 和 I/O 环境决定预取页数。 |
| TRACKMOD | YES | 跟踪备份后发生修改的页面,为增量和差异备份提供依据,会增加少量跟踪开销。 |
十、表空间默认值和连接规模
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| Default number of containers | 1 | 默认表空间使用一个容器,不代表后续所有表空间只能有一个容器。 |
| DFT_EXTENT_SZ | 32 pages | 新建表空间未指定 extent 时默认使用 32 页。4K 页数据库中每个 extent 为 128 KiB。 |
| MAXAPPLS | AUTOMATIC(40) | 数据库并发活动应用目标或上限由 DB2 自动管理,括号内不是实时连接数。 |
| AVG_APPLS | AUTOMATIC(1) | 优化器和内存管理对平均活动应用数的估算。 |
| MAXFILOP | 61440 | 单个应用可打开的数据库文件数量上限,主要影响大量表空间和容器的环境。 |
十一、活动日志
为避免暴露现场目录,以下使用变量表示路径:
# 按现场规划替换,在线日志和镜像日志最好位于不同故障域
ONLINE_LOG_DIR="/path/to/online-log"
MIRROR_LOG_DIR="/path/to/mirror-log"| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| LOGFILSIZ | 10000 × 4KB | 单个日志文件约 39.06 MiB。过小会频繁切换,过大则预分配和恢复扫描更重。 |
| LOGPRIMARY | 50 | 预先存在的主日志数量,约占 1.91 GiB。镜像目录还会保存一套相同日志。 |
| LOGSECOND | 100 | 主日志不足时最多动态创建 100 个辅助日志,额外约 3.81 GiB。辅助日志不能代替对长事务的治理。 |
| NEWLOGPATH | 空 | 当前没有等待下一次激活生效的新日志路径变更,不代表实际日志目录为空。 |
| Path to log files | <在线日志目录>/NODE0000/ | 当前实际活动日志目录,文章中已脱敏。 |
| OVERFLOWLOGPATH | 空 | 没有配置额外的恢复日志搜索路径。ROLLFORWARD 需要其他位置日志时应显式提供。 |
| MIRRORLOGPATH | <镜像日志目录>/NODE0000/ | 每次日志写入同时写入镜像目录。如果两个目录在同一磁盘或逻辑卷上,无法抵御整个存储故障。 |
| First active log file | S0000001.LOG | 恢复链中最早仍被视为活动的日志文件,会随事务和日志归档推进而变化。 |
| BLK_LOG_DSK_FUL | NO | 日志盘满时不让数据库整体无限等待磁盘恢复,相关事务通常会收到日志空间错误。 |
| BLOCKNONLOGGED | NO | 允许部分非日志或最小日志操作,可能影响完整前滚恢复能力,需要结合 LOAD、NOT LOGGED 等操作判断。 |
| MAX_LOG | 0 | 不限制单个事务最多占用主日志空间的百分比。 |
| NUM_LOG_SPAN | 0 | 不限制单个事务跨越的活动日志文件数。 |
| MINCOMMIT | 1 | 至少一个提交即可触发日志落盘,提交延迟低,但高并发时可能产生更多日志 I/O。 |
| SOFTMAX | 520 | 软检查点目标大约对应 5.2 个日志文件的恢复窗口。值越大,崩溃恢复可能需要扫描更多日志。 |
| LOGRETAIN | RECOVERY | 旧参数形式,表示保留日志支持前滚恢复,与 LOGARCHMETH1=LOGRETAIN 是同一模式的两种显示。 |
| USEREXIT | OFF | 不调用旧式用户自定义归档程序。 |
日志容量应按最坏情况计算:
单套最大日志空间 ≈ LOGFILSIZ × 4 KiB × (LOGPRIMARY + LOGSECOND)
配置镜像日志后,再乘以 2十二、HADR 高可用
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| HADR database role | STANDARD | 当前不是 HADR PRIMARY 或 STANDBY,只是普通数据库。 |
| HADR_LOCAL_HOST | 空 | 未配置本端 HADR 主机名。 |
| HADR_LOCAL_SVC | 空 | 未配置本端 HADR 日志传输服务端口。 |
| HADR_REMOTE_HOST | 空 | 未配置远端 HADR 主机名。 |
| HADR_REMOTE_SVC | 空 | 未配置远端 HADR 日志传输端口。 |
| HADR_REMOTE_INST | 空 | 未配置远端实例名。 |
| HADR_TIMEOUT | 120 | 启用 HADR 后,通信超过 120 秒无响应会被认为超时。当前 STANDARD 状态下不生效。 |
| HADR_SYNCMODE | NEARSYNC | 启用 HADR 后,主库提交等待日志到达备库内存,但通常不等待备库日志落盘。当前不生效。 |
| HADR_PEER_WINDOW | 0 | 未启用 peer window。当前 STANDARD 状态下不生效。 |
十三、日志归档
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| LOGARCHMETH1 | LOGRETAIN | 开启前滚恢复,但不主动把日志复制到独立归档目录。失活日志继续留在活动日志区域,需要人工搬运和清理。 |
| LOGARCHOPT1 | 空 | 第一归档方法没有附加选项。 |
| LOGARCHMETH2 | OFF | 没有第二套归档目标。 |
| LOGARCHOPT2 | 空 | 第二归档方法没有附加选项。 |
| FAILARCHPATH | 空 | 第一归档目标失败时没有备用归档目录。 |
| NUMARCHRETRY | 5 | 归档失败时最多重试 5 次。配置 DISK、TSM 或供应商归档后更有意义。 |
| ARCHRETRYDELAY | 20 秒 | 每次归档重试之间等待 20 秒。 |
| VENDOROPT | 空 | 没有给第三方备份或归档库传递供应商选项。 |
如果实验环境不要求严格复刻 LOGRETAIN,可以考虑把归档日志写入独立备份卷:
# ARCHIVE_LOG_DIR 必须替换为现场规划的归档目录
ARCHIVE_LOG_DIR="/path/to/db2-archive/SAMPLEDB"
# 下面两个值是脱敏占位值,必须替换为现场 DB2 实例属主和管理组
DB2_INSTANCE_USER="your_db2_instance_user"
DB2_INSTANCE_GROUP="your_db2_instance_group"
mkdir -p "${ARCHIVE_LOG_DIR}"
chown "${DB2_INSTANCE_USER}:${DB2_INSTANCE_GROUP}" "${ARCHIVE_LOG_DIR}"
chmod 750 "${ARCHIVE_LOG_DIR}"
db2 update db cfg for "${DB_NAME}" using LOGARCHMETH1 "DISK:${ARCHIVE_LOG_DIR}"上面示例中的 DB2_INSTANCE_USER、DB2_INSTANCE_GROUP、DB_NAME 和 ARCHIVE_LOG_DIR 都是必须按现场替换的变量。改变归档模式后还要确认数据库是否进入 backup pending,并及时做一次完整备份。
十四、崩溃恢复、索引和恢复历史
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| AUTORESTART | ON | 数据库异常终止后,下次激活或连接时自动执行崩溃恢复。 |
| INDEXREC | SYSTEM (RESTART) | 继承系统设置,当前解析为 RESTART;需要重建的无效索引倾向于在数据库重启恢复阶段处理。 |
| LOGINDEXBUILD | OFF | 索引创建和重建不会完整记录索引页内容,可减少日志量;前滚恢复时相关索引可能需要重新构建。 |
| DFT_LOADREC_SES | 1 | LOAD 恢复等场景默认使用 1 个恢复会话,资源占用低,但并行恢复能力有限。 |
| NUM_DB_BACKUPS | 12 | 恢复历史计划保留的数据库备份数量参考值。它本身不会自动删除物理备份。 |
| REC_HIS_RETENTN | 366 天 | 恢复历史记录默认保留 366 天,主要影响历史元数据。 |
| AUTO_DEL_REC_OBJ | OFF | 不自动删除过期备份、归档日志和恢复历史对象,需要人工维护。 |
十五、TSM 备份参数
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| TSM_MGMTCLASS | 空 | 未指定 IBM Tivoli Storage Manager/Storage Protect 管理类。 |
| TSM_NODENAME | 空 | 未配置 TSM 节点名。 |
| TSM_OWNER | 空 | 未配置 TSM owner。 |
| TSM_PASSWORD | 空 | 未在 DB CFG 中保存 TSM 密码。 |
这些字段为空时,不能据此判断本地文件系统备份是否存在,只能说明 DB CFG 没有配置对应 TSM 参数。
十六、自动维护
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| AUTO_MAINT | ON | 自动维护总开关开启,但各子功能仍由自己的开关决定。 |
| AUTO_DB_BACKUP | OFF | DB2 不会自动执行数据库备份,需要由人工、cron、脚本或备份平台调度。 |
| AUTO_TBL_MAINT | ON | 自动表维护总开关开启。 |
| AUTO_RUNSTATS | ON | DB2 可以自动更新表和索引统计信息,帮助优化器生成合理执行计划。 |
| AUTO_STMT_STATS | ON | 收集语句使用信息,帮助自动统计机制判断实际 SQL 需要哪些统计数据。 |
| AUTO_STATS_PROF | OFF | 不自动生成统计 profile。 |
| AUTO_PROF_UPD | OFF | 不自动更新或应用统计 profile。 |
| AUTO_REORG | OFF | 不自动重组表和索引。大量更新或删除后,需要人工执行 REORGCHK 和 REORG。 |
十七、自动重验证、并发语义和 XML
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| AUTO_REVAL | DEFERRED | 对象变更导致包、视图或例程失效时,延迟到下次使用时再尝试重验证。 |
| CUR_COMMIT | ON | 在 Cursor Stability 等隔离级别下,读取遇到未提交更新时可以读取最近已提交版本,减少读写阻塞。 |
| DEC_TO_CHAR_FMT | NEW | DECIMAL 转字符采用较新的 DB2 格式规则,兼容旧应用时要关注输出差异。 |
| ENABLE_XMLCHAR | YES | 允许 DB2 支持的 XML 与字符类型相关操作和转换。 |
| WLM_COLLECT_INT | 0 | 不按固定分钟间隔采集 WLM 聚合统计。0 表示关闭周期性采集。 |
十八、监控数据采集
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| MON_REQ_METRICS | BASE | 采集请求级基础指标,开销低,详细度有限。 |
| MON_ACT_METRICS | BASE | 采集活动和 SQL 执行基础指标。 |
| MON_OBJ_METRICS | BASE | 采集表、索引和缓冲池等对象的基础指标。 |
| MON_UOW_DATA | NONE | 不采集完整工作单元事件数据。 |
| MON_LOCKTIMEOUT | NONE | 不生成锁超时事件记录。 |
| MON_DEADLOCK | WITHOUT_HIST | 采集死锁事件,但不附带完整历史活动信息。 |
| MON_LOCKWAIT | NONE | 不采集普通锁等待事件。 |
| MON_LW_THRESH | 5000000 | 锁等待事件阈值约为 5 秒;只有启用锁等待事件采集后才真正发挥作用。 |
| MON_PKGLIST_SZ | 32 | 监控工作单元事件时最多保留 32 个包列表条目。 |
| MON_LCK_MSG_LVL | 1 | 锁事件通知级别为 1,提供基础锁消息。 |
十九、其他可选参数
| 参数 | 示例值 | 作用和影响 |
|---|---|---|
| SMTP_SERVER | 空 | 没有配置 SMTP 服务器。 |
| SQL_CCFLAGS | 空 | 没有设置 SQL 条件编译标志。 |
| SECTION_ACTUALS | NONE | 不采集执行计划节点的实际行数等 section actuals 数据,监控开销低,但难以比较估算值与实际值。 |
| CONNECT_PROC | 空 | 用户连接数据库时不自动调用连接过程。 |
二十、DB CFG 看不到什么
GET DB CFG 只覆盖数据库级参数。下面这些信息必须从其他位置检查:
# 实例级配置:服务端口、认证、最大连接等
db2 get dbm cfg
# DB2 注册表变量:DB2COMM 等
db2set -all
# 实际缓冲池配置
db2 "select bpname, pagesize, npages from syscat.bufferpools"
# 表空间状态
db2 list tablespaces show detail
# 将 0 换成上一步输出的实际数字 ID
TBSP_ID=0
db2 list tablespace containers for "${TBSP_ID}" show detail
# 当前数据库内存使用
db2pd -db "${DB_NAME}" -memsets
# 当前日志使用和恢复链
db2pd -db "${DB_NAME}" -logs
# 当前应用和锁
db2 list applications show detail
db2pd -db "${DB_NAME}" -locks其中 TBSP_ID=0 只是示例值,执行前必须替换为目标表空间的实际数字 ID。
二十一、建议的巡检顺序
以后拿到一份陌生数据库的 CFG,可以按下面顺序判断:
- 先看代码页、页大小和排序序列,确认建库属性是否符合应用要求。
- 看 backup pending、rollforward pending 和 restore pending,确认数据库是否处于特殊恢复状态。
- 看 DATABASE_MEMORY、缓冲池、排序堆和工具堆,判断内存配置是否与主机资源匹配。
- 看 LOCKLIST、MAXLOCKS、LOCKTIMEOUT 和死锁监控,判断阻塞问题是否容易被发现。
- 计算 LOGFILSIZ、LOGPRIMARY、LOGSECOND 和镜像日志的最大磁盘占用。
- 确认 LOGARCHMETH1 是否有真正的归档目标,以及归档日志由谁清理。
- 确认备份是否自动执行、恢复历史保留多久、旧文件是否自动删除。
- 最后结合
DBM CFG、db2set、表空间、缓冲池和实时db2pd数据判断,不能只凭一份静态 DB CFG 下结论。
二十二、总结
GET DB CFG 的价值不在于保存一份长输出,而在于建立参数之间的联系:
- 内存参数决定数据库能在内存里完成多少工作。
- 锁参数决定并发冲突如何等待、升级和暴露。
- 活动日志决定事务峰值能撑多久。
- 归档日志和备份共同决定能恢复到什么时间点。
- 自动维护和监控参数决定问题能否提前发现。
真正做配置迁移时,还要特别区分“固定配置值”和 AUTOMATIC(当前值)。只有配置方式可以复用,当前运行值必须让目标机器重新计算。