记录一次对DB2扩容表空间报错的案例总结
一、问题描述
上次下班高铁回程路上,突然收到客户消息生产库扩容表空间报错,心想之前客户扩充很多次应该没啥难度。没时间细问先手机查看报错信息
扩容单个表空间多个容器报错,查询相关表空间信息
db2 list tablespaces show detail
Number of container 13
二、问题分析
在DB2数据库中,表空间(tablespace)是用于存储数据库对象(如表、索引等)的逻辑容器。随着数据量的堆叠,表空间扩容是避免空间不足常规操作。DB2提供了extend/resize命令来扩展表空间的大小。然而,在某些情况下,使用resize命令扩容表空间可能会引发所谓的“rebalance”问题。本次就是因为扩容多容器表空间不均触发rebalance导致。
在扩容表空间是要注意。
Rebalance问题可能对数据库性能产生以下影响:
- 性能下降:数据页的迁移会占用大量的I/O资源和CPU资源,导致数据库的整体性能下降。
- 资源消耗:Rebalance操作可能会增加数据库的存储需求,因为需要额外的空间来存储临时数据。
- 事务延迟:正在进行的事务可能会因为rebalance操作而被延迟,影响事务的响应时间。
三、解决办法
一个表空间多个容器不要单个扩,执行all操作,,就不出现这种情况了。
db2 " alter tablespace XXXXX extend ( all <page_numbers>) "
如下命令可以查询rebalane信息
select
varchar(tbsp_name, 30) as tbsp_name,dbpartitionnum,member,rebalancer_mode,rebalancer_status,rebalancer_extents_remaining,rebalancer_extents_processed,rebalancer_start_time
from table(mon_get_rebalance_status(NULL,-2)) as t
本次执行了单条之后,等待完成 rebalance 之后在操作其他。
四、总结
扩容表空间的时候触发Rebalance会影响数据库性能,建议提前规划尽量避免。
此外如果遇到如下情况请参考处理:
- hacmp 单点控制的lv操作,有时候出问题,建议在A 机直接扩lv, 在hacmp 切换到B机 hacmp自动importvg 会把lv 信息更新的。
- 扩容操作选择业务空闲时间进行,避免影响正常业务系统操作。
- 扩容前后确认数据库状态是否正常,日志有无报错,系统资源使用率是否正常,无异常报错。
- 表空间扩充还可以通过添加新容器或者改变当前容器大小两种方式来实现,加容器之后DB2会有一个自动balance的过程,可能会持续几个小时,而通过改变容器大小的方式不会触发balance,但如果表空间建立在裸设备上,则要扩充裸设备空间。
- 扩容时可通过vmstat nmon等命令查询系统cpu、内存、io等正常。




