"SQL1218N 在缓冲池 4096 中当前没有任何页面可用"问题的解决(由于隐藏的buffer引发的血案)

1.报错信息:SQL1218N 在缓冲池 4096 中当前没有任何页面可用(表面上看是4k的buffer不足,调大后错误仍然存在)

2.经定位后找到原因:由于自定义的表空间过大初始化失败.

(1)使用db2diag -time 2011-05-18找到的错误信息:

      db2 will use buffer pool ID "4096" 2011-05-18-20.03.01.859000+480 E10001937H805 LEVEL: Warning PID : 9544 TID : 9492 PROC : db2syscs.exe INSTANCE: DB2 NODE : 000 DB : EDW_BACK APPHDL : 0-7 APPID: *LOCAL.DB2.110518120300 AUTHID : EDWDATA EDUID : 9492 EDUNAME: db2agent (EDW_BACK) 0 FUNCTION: DB2 UDB, buffer pool services, sqlbStartPools, probe:2 MESSAGE : ADM6073W The table space "SYSTOOLSTMPSPACE" (ID "9") is configured to use buffer pool ID "1", but this buffer pool is not active at this time. In the interim the table space will use buffer pool ID "4096". The inactive buffer pool should become available at next database startup provided that the required memory is available.

 (2)另外察看buffer的使用情况,也没有自己定义的buffer
     update monitor switches using bufferpool on
     db2 get snapshot for bufferpools on edw

 

3.最终导致的错误:buffer不足。(因为db2隐藏的buffer很小,只有16个页面,导致不够用)

2011-05-18-20.03.14.593000+480 E10004447H557 LEVEL: Error PID : 9544 TID : 588 PROC : db2syscs.exe INSTANCE: DB2 NODE : 000 DB : EDW_BACK APPHDL : 0-11 APPID: *LOCAL.DB2.110518120312 AUTHID : EDWDATA EDUID : 588 EDUNAME: db2agent (EDW_BACK) 0 FUNCTION: DB2 UDB, Common Trace API, sqlbFreeUpSlot, probe:122 MESSAGE : ADM6019E All pages in buffer pool "IBMSYSTEMBP4K" (ID "4096") are in use. Refer to the documentation for SQLCODE -1218.

 

4.隐藏的buffer: IBMSYSTEMBP4K IBMSYSTEMBP8K IBMSYSTEMBP16K IBMSYSTEMBP32K 只有在buffer pool initialization failed时才使用这些buffer

2011-05-18-20.03.02.125000+480 I10003780H665 LEVEL: Warning PID : 9544 TID : 9492 PROC : db2syscs.exe INSTANCE: DB2 NODE : 000 DB : EDW_BACK APPHDL : 0-7 APPID: *LOCAL.DB2.110518120300 AUTHID : EDWDATA EDUID : 9492 EDUNAME: db2agent (EDW_BACK) 0 FUNCTION: DB2 UDB, Self tuning memory manager, stmmStartSTMMIfNecessary, probe:490 MESSAGE : ZRC=0x87AE015F=-2018639521=STMM_DAEMON_COULD_NOT_START "STMM Daemon could not be started" DATA #1 : String, 89 bytes The self tuning memory manager was not started because buffer pool initialization failed.

 

 5.解决方案:减小buffer的大小.

 

 6.问题的诱因:2011-05-18,由于机房的空调出现问题,导致这个主机重新启动.启动之后数据也正常启动(表面上看是正常启动,实际上错误日志里已经有了警告信息).另外在该主机上我们还部署了etl工具的agent上一周我们把agent的个数调大了,一直没有重新启动agent服务.这次的机器重启,引发了agent服务和db的资源争用,导致数据库表空间自定义的buffer初始化失败,系统使用隐藏的buffer,隐藏的buffer都比较小,所以报"缓冲池 4096 中当前没有任何页面可用"

 

7.总结:db2 vs oracle

 如果oracle的内存(sga+pga)初始化失败,会导致数据库启动失败.

 如果db2的内存初始化失败,会使用隐藏的buffer,以保证数据库的启动.但是后续的应用会出现很多问题.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值