如果遇到死锁的问题,如何来调查原因呢? (From DBMR1703, version: DBMaster 4.1.2, OS: Windows XP Embedded SP1)
为了调查原因,首先要监测锁,例如,如下所示:
dmSQL> select USER_NAME, TABLE_NAME, SYSLOCK.LK_OBJECT_ID,
SYSLOCK.LK_GRAN, SYSLOCK.HOLD_LK_CONNECTION, SYSLOCK.LK_CURRENT_MODE
from SYSLOCK, SYSTEM.SYSTABLE, SYSUSER where HOLD_LK_CONNECTION = CONNECTION_ID and LK_OBJECT_ID = TABLE_OID and TABLE_OWNER != 'SYSTEM' and LK_GRAN != 'SYSTEM';
USER_NAME TABLE_NAME LK_OBJECT_ID LK_GRAN HOLD_LK_CONNECTION LK_CURRENT_MODE
========== ========== ============== ======== ==================== ==================
SYSADM D 1b00000000000600 TABLE 575 X
1 rows selected
然后当死锁发生时,应该每隔几秒中就select SYSUSER来获得锁状态信息。
从以上获得的所有信息对调查死锁的原因都是有帮助的。