语句等锁超时排查解决方法

举报
七个菠挪 发表于 2021/06/17 17:31:35 2021/06/17
【摘要】 语句等锁超时排查解决方法

在平时使用数据库时,可能会出现语句执行不出来,一段时间后报等锁超时的问题。

如下我们执行一条drop语句一直处于该状态,并未返回drop成功或失败的结果,直到20分钟后语句报等锁超时错误。

从执行语句的CN日志中可以看出

1.语句等锁超时了。

2.持锁的线程是281470339382768,对应的语句是statement <select count(*) from aaa;>。

3.执行失败的语句是drop table aaa cascade。

我们可以发现aaa这个表被其他语句使用了,无法被drop。

可以通过持锁语句关键字找出语句执行的CN,杀掉持锁语句再执行目标语句即可,如下:

select * from pgxc_stat_activity where query like '%aaa%' and query not like '%pgxc_stat_activity%';(红色字体手动替换为对应关键字)

连接CN_5005节点CN,执行select pg_terminate_backend(pid); 返回t,可重新执行目标语句。若执行成功,说明持锁语句全被清除,若仍无法执行出结果,可参考如下操作。

1.通过活跃视图查出执行语句的query_id。

2.通过query_id找到等待视图等锁的实例,如下图是在等cn_5005。

3.连接对应实例,执行select * from pg_locks where pid = 281469917855216 对应等待视图的tid;granted为f的是等锁状态,t为持锁状态;如下图等锁的relation为26850。

4.在执行select * from pg_locks where relation = 26850;可以发现该实例有两个语句持锁。

5.select * from pg_stat_activity where pid in (281470171610608, 281470339382768);替换为granted为t的pid。

6.对应持锁语句已经找到,找到持锁语句下发的CN,select pg_terminate_backend(pid),目标语句执行成功。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。