DM
之
SQL
阻塞分析步骤
样例:
第一步,查询阻塞的事务
ID
select * from v$trxwait order by wait_me desc; --
单机
select * from v$dsc_trxwait order by wait_me desc; --DSC
集群
第二步,查询阻塞事务的会话信息
select sf_get_session_sql(sess_id),* from v$sessions where trx_id=69667; --
单机
select sf_get_session_sql(sess_id),* from gv$sessions where trx_id=69667; --DSC
集群
第三步,查询问题
SQL
cat dmsql_xxxxxx.log | grep "trxid:69967" --
查找问题
DML SQL
,保留
注:需要开启
SVR_LOG
参数
第四步,杀掉会话
sp_close_session(139926142266440);
注:对于
DSC
,需要在相应的节点执行。
其他
SQL
,
select * from v$lock where trx_id=69667; --
查询阻塞事务的相关锁信息
1
前言
当进行日常巡检、用户反馈执行
SQL
语句卡住或应用运行缓慢时,需要查询数据库中
有没有阻塞的会话
SQL
在执行,找到它,记录它,杀掉它,最后再分析
SQL
的合理性,
优化它。
2
阻塞分析步骤
2.1
问题描述
用户报告:执行某条
DML
语句,发现卡住,很长时间都没有执行完成,比如如下
SQL
,
update test set c1=3; --
会话
1
猜测可能是某个事务未提交导致相关表锁住,阻塞了本事务的执行,导致等待。
就算是
SQL
执行慢也需要先查下有没有阻塞。
2.2
查询阻塞事务
文档被以下合辑收录
评论