DB2优化-异常的DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=68, DRIVER=3.62.56

时间:2025-03-22 11:52:27

     一台DB2数据库,近期交易总是锁表,报错如下:

    - DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=68, DRIVER=3.62.56 

        一般报  SQLCODE=-911的错误时,我们优先就会想到是不是索引问题,但这次从日志中看,报错时间点的数据库更新并不频繁,也没有对同一张表的同一行做UPDATE操作,而且报错的表字段少,且是用主键执行UPDATE,因此不可能是索引问题。

        回看了报错时间前10分钟的日志,发现之前有大的数据量查询、更新,但都是很正常的,只有到这条SQL时,突然就出现异常了。因此,我判断是数据库自身性能问题。

       过程我就不细写了,最终判断为缓冲池的问题。修改完后系统速度立马从拖拉机变成飞机。

        附上修改方案:

       说明:是经常锁表的表名

      1、 在数据页中预留空间

 alter table (表名)  PCTFREE 30(预留30%)

 load from  of ixf modified by pagefreespace=30 replace into 

       2、新建缓冲池:
     

 db2 create bufferpool bp_tbs size 1000 pagesize 4k
       
 alter tablespace TBS bufferpool bp_tbs

       当脏页超过CHNGPGS_THRESH(%,db cfg)时,缓冲池将被清空并写回

       3、延展缓冲池:
       ESTORE_SEG_SZ& NUM_ESTORE_SEGS(db cfg)
       

db2 alter bufferpool ibmdefaultbp [ not ] extended storage

      4、表格重整:

db2 reorg table 

      5、索引重整:

db2 reorg indexes all for table  _options_

options:allow read|write|no access, cleanup only pages|all(不重建索引结构,只回收空索引页)

 

参考文献:

数据页的缓冲池管理

DB2数据库性能调整的相关命令