1 问题现象:
缓冲池失效,无法正常启动。 数据库版本DB2 v8.1.1.112 实例32位
2 问题诊断:
2.1 查看诊断日志:https://www.cndba.cn/hbhe0316/article/4879
1、2015-03-29-18.10.18.841608+480 E60709218C669 LEVEL: Warning
PID : 2175098 TID : 1 PROC : db2agent (DEPDB) 0
INSTANCE: depinst NODE : 000 DB : DEPDB
APPHDL : 0-1362 APPID: *LOCAL.depinst.150329100954
FUNCTION: DB2 UDB, buffer pool services, sqlbAlterBufferPool, probe:50
MESSAGE : ADM6050W The ALTER BUFFERPOOL statement for buffer pool
"BIZ_BUFFER_04X" (ID "5") was successful but could not be performed
immediately because of insufficient memory. The change will take
effect on the next database startup. Refer to the documentation for
SQLCODE 20189.
2、2015-09-26-03.45.42.822250+480 I63467970C486 LEVEL: Severe
PID : 921820 TID : 1 PROC : db2agent (DEPDB) 0
INSTANCE: depinst NODE : 000 DB : DEPDB
APPHDL : 0-516 APPID: *LOCAL.depinst.150925194542
FUNCTION: DB2 UDB, base sys utilities, sqleFirstConnect, probe:15
RETCODE : ZRC=0x850F0005=-2062614523=SQLO_NOSEG
"No Storage Available for allocation"
DIA8305C Memory allocation failure occurred.
2015-09-26-03.45.42.834774+480 I63468457C442 LEVEL: Severe
PID : 921820 TID : 1 PROC : db2agent (DEPDB) 0
INSTANCE: depinst NODE : 000 DB : DEPDB
APPHDL : 0-516 APPID: *LOCAL.depinst.150925194542
FUNCTION: DB2 UDB, base sys utilities, sqleFirstConnect, probe:16
MESSAGE : DiagData
DATA #1 : Hexdump, 4 bytes
0x2FF11F90 : 9FE7 0000
3、2015-09-26-03.45.46.571853+480 I63482377C520 LEVEL: Severe
PID : 921820 TID : 1 PROC : db2agent (DEPDB) 0
INSTANCE: depinst NODE : 000 DB : DEPDB
APPHDL : 0-516 APPID: *LOCAL.depinst.150925194542
FUNCTION: DB2 UDB, buffer pool services, sqlbinit, probe:620
DATA #1 : String, 70 bytes
Database will come up with hidden buffer pools.
totalBufferPoolPages:
DATA #2 : Hexdump, 8 bytes
0x2FF0C868 : 0000 0000 0000 0040
分析:3月29日缓冲池(BUFFERPOOL)扩容后至9月26日事发前(如图1所示),数据库实例并未重启,因此扩容后,缓冲池并未生效,该事件未能触发。
9月26日对重启数据库实例后,分配数据库共享内存时大于2GB,从而造成所有主缓冲池无法正常启动(如图2、3所示),随后系统默认缓冲池(极小容量)顺利接管,过程中未影响业务。
2.2 实例配置分析
数据库为32位实例,因此数据库申请共享内存超出2GB上线,致使主缓冲池无法正常启动,从而造成事件的产生。https://www.cndba.cn/hbhe0316/article/4879https://www.cndba.cn/hbhe0316/article/4879https://www.cndba.cn/hbhe0316/article/4879
3 数据收集:https://www.cndba.cn/hbhe0316/article/4879
3.1 通过低权appmon直接运行
db2mtrk -d -v
可直接获取到(主缓冲池内存 + 4个隐藏缓冲池 + 数据库堆dbheap + 锁列表locklist + 工具堆utilheap + 包缓冲堆packageCache + 编目堆CatalogCache) 的总和为Total
数据库共享内存 = (主缓冲池内存 + 4个隐藏缓冲池 + 数据库堆dbheap + 锁列表locklist + 工具堆utilheap + 包缓冲堆packageCache + 编目堆CatalogCache) + 约10%开销预留 = total+total * 1.1(开销预留)>2GB
3.2 查看缓冲池
db2pd -db DATABASENAME -bufferpools
select * from syscat.bufferpools
查看失效的缓冲池大小并加入到主缓冲池内存中
4 恢复步骤:https://www.cndba.cn/hbhe0316/article/4879
4.1 修改失效缓冲池大小
alter bufferpool bufferpoolname immediate size <value>
如提示需要重新激活数据库生效,则需要重启数据库。
注:针对调整的value与其他共享堆相加不能大于2GB。
4.2 重启数据库实例
db2 force applications all
db2stop force
db2start
4.3 查看当前缓冲池状态是否正常https://www.cndba.cn/hbhe0316/article/4879
db2pd -db <dbname>-bufferpools
版权声明:本文为博主原创文章,未经博主允许不得转载。
DB2