1 有时候对数据库操作会遇到锁超时
1.1 找到导致阻塞的会话,提交或回滚事务,阻塞解除。
- 模糊匹配当前表全部的sql会话,若对表结构修改,需要关闭表的全部会话
SELECT * FROM V$SESSIONS WHERE SQL_TEXT LIKE '%TABLE_1%'
1.2 关闭阻塞的会话
SP_CLOSE_SESSION(SESS_ID)
2 通过sql语句查询锁超时相关的事务/会话
SELECT DISTINCT
T1.WAIT_SESS_ID,
T1.WAIT_SQL_TEXT,
T1.WAIT_TIME WAIT_TIME_MS,
T1.WAIT_TRX_ID,
T2.BEFOR_TRX_ID,
T2.BEFOR_BEGIN BEFOR_BEGIN_TIME,
T2.BEFOR_SQL_TEXT,
T2.BEFOR_SESS_ID
FROM
(
SELECT
SESS.SESS_ID WAIT_SESS_ID ,
SESS.SQL_TEXT WAIT_SQL_TEXT,
TW.ID WAIT_TRX_ID ,
TW.WAIT_FOR_ID WAIT_TW_ID,
TW.WAIT_TIME
FROM
V$TRXWAIT TW,
V$SESSIONS SESS
WHERE
TW.ID=SESS.TRX_ID
)
T1,
(
SELECT
SESS.SESS_ID BEFOR_SESS_ID ,
SESS.SQL_TEXT BEFOR_SQL_TEXT,
TW.WAIT_FOR_ID BEFOR_TRX_ID,
LAST_RECV_TIME BEFOR_BEGIN
FROM
V$TRXWAIT TW,
V$SESSIONS SESS
WHERE
TW.WAIT_FOR_ID=SESS.TRX_ID
)
T2
WHERE
T1.WAIT_TW_ID=T2.BEFOR_TRX_ID
ORDER BY BEFOR_TRX_ID;
3 查询结果如图:
4 结果详细说明
4.1 显示事务等待信息。
SELECT * FROM V$TRXWAIT;
序 号 | 列 | 数据类型 | 说明 |
---|
1 | ID | BIGINT | 事务 ID |
2 | WAIT_FOR_ID | BIGINT | 所等待的事务 ID |
3 | WAIT_TIME | INTEGER | 当前等待时间 |
4.2 显示会话的具体信息,如执行的 sql 语句、主库名、当前会话状态、用户名等等。
SELECT * FROM V$SESSIONS;
4.3 显示活动的事务锁信息。
SELECT * FROM V$LOCK;;
4.4 锁模式介绍
5 查询事务锁
SELECT
L.LMODE ,
L.TABLE_ID ,
O.NAME ,
S.SQL_TEXT ,
L.TRX_ID ,
L.LTYPE ,
L.BLOCKED ,
S.CREATE_TIME,
S.CLNT_IP ,
T.THRD_ID ,
T.STATUS
FROM
V$LOCK L ,
V$TRX T ,
V$SESSIONS S,
SYSOBJECTS O
WHERE
L.TID =T.ID
AND T.SESS_ID =S.SESS_ID
AND L.TABLE_ID=O.ID
ORDER BY
CREATE_TIME DESC;
6 更多达梦数据库使用经验
查看更多达梦数据库使用经验总结 - - 点击跳转