为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:linux
【CPU】:
【问题描述】*:怎么排查,中的锁超时问题。系统运行一段时间就会出现锁超时问题。
具体原因要怎么分析? 按说只能等待同一条数据的更新才会出现锁超时吧?### The error may involve defaultParameterMap
; 锁超时; nested exception is dm.jdbc.driver.DMException: 锁超时
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
at jdk.proxy2/jdk.proxy2.$Proxy192.update(Unknown Source)
试下下面这个查询,看看能否帮助找到引起锁冲突的原因。
当发现系统出现卡顿情况时,从后台查一下是否存在锁阻塞情况
其中:
LOCKINGINFO 当前会话持有的锁信息
BLOCKING_INFO 当前会话如果被阻塞,则引起当前会话阻塞状态的上级会话信息
BLOCKING_SOURCE 当前会话如果被阻塞,则追溯会话来源信息,可能有多级阻塞的情况,能够找到源头阻塞会话
很有可能发现引起锁的源头会话是处于IDLE状态,这个说明源头会话已经完成SQL的执行,但没有提交事务。
有可能是应用程序未及时提交,或者因调用外部接口或程序异常造成事务无法提交。
这个查询是很久前写的,应该能支持相对较早的版本。
在这个查询中,之前很多字段都已经简化掉了,但仍显得十分臃肿。可以根据现场实际情况进行裁剪,比如单机环境下可以把DSC相关子查询都删掉。
另,某些旧版本下lock视图貌似性能不咋地,所以这个查询只能算是凑合用。好在只是查询,不会影响业务数据。
出现报错时执行下面SQL,可以查看锁链路:
select s.trx_id as "正在运行的事务ID",
lpad('-', 2*(level-1), '-')||s.trx_id "锁等待链",
s.state "会话状态",
s.sess_id as "等待的会话",
ws.sess_id as "正在执行的会话",
s.sql_text as "等待的sql",
ws.sql_text as "正在执行的sql" ,
-- cast(ws.rowid as varbinary ) >> 58 "运行节点号", --MPP集群专用
'SP_CLOSE_SESSION('||ws.sess_id||');' "关闭会话的语句",
ws.thrd_id "会话线程"
from v$sessions s
left join v$trxwait tw
on tw.id=s.trx_id
join v$lock k
on s.trx_id =k.trx_id
and k.lmode in ('IX')
and ign_flag=0
left join v$sessions ws
on tw.wait_for_id = ws.trx_id
start with ws.sess_id IS NULL
connect by nocycle PRIOR s.sess_id = ws.sess_id ;