应用程序执行一条update语句,表数据2731行
update table set STEP_STATUS=0, BEGIN_TIME='', FINISH_TIME='' where cola ='PLAN-0-74-0-20200331005054-OCC-1' and colb=13
然后一直卡住,表可以查询这条数据,如果再执行一次也是卡住,db2diag.log 没有报异常,没有锁表。
日志报的这个不知道算不算异常
Locking memory management: GLM-memory low.
SP threshold activated.
GLM-lock list size = 33275244
GLM-lock list available = 5364654
看了下您问题的描述,你们的环境使用的 DB2 pureScale 。
db2pd -d <dbname> -cfdump struct=glm
如果你们已经排除 update 时的 “锁等” 问题,看您提供的信息,我很怀疑是本地锁管理器 LLM 向 CF 的全局锁管理器 GLM 申请 “物理锁”时,GLM 内存资源有限导致的问题,先试一试调大 CF_DB_MEM_SZ 内存中的 cf_lock_sz ,或者根据性能测试结果,决定考虑是否启用 CF内存自调整功能。
如果不是 cf 内存设置的问题,建议加强 CF 的监控数据收集,可以使用 MON_GET_CF_CMD() 、 MON_GET_CF_WAIT_TIME () 等表函数或者成熟的监控软件进行监控,根据监控进一步确定问题。
收起数据库里执行这条语句的application状态是什么?看看有没有锁等待或者latch等待。
查数据库锁等待
db2pd -d DB_NAME -wocks
查数据库latch
db2pd -d DB_NAME -latch