[toc]
适用范围
环境:
服务端 tbase-2.15.18.x
客户端 Dbever-7.3.x
sql脱敏: select * from table_name limit 10;
注:本文后续使用sbtestX表模拟, 无用户相关信息
问题概述
用户执行select * from table_name limit 10;
无反应(超过5分钟). 看起来是数据库繁忙或者锁, 查询系统IO和cpu 都不高, 查询其它表正常.
\dt table_name 也会卡住 (其它表正常)
问题原因
查询表相关的锁信息, 发现AccessShareLock
select * from pg_locks aa where aa.relation in (select oid from pg_class where relname='sbtest1');
查看对应的sql,发现为 大表之间的left join, 无where条件 (左表600w行, 13GB, 右表1000w行, dn,cn 内存均2GB....)
select * from pg_stat_activity where pid in (select pid from pg_locks aa where aa.relation in (select oid from pg_class where relname='sbtest1'));
解决方案
问题就是这条sql引起的, 所以决定kill这个会话
数据库层kill (失败)
select pg_cancel_backend('pid'); -- 返回t, 但sql还在执行
select pg_terminate_backend('pid'); --同上
客户端层重启 (失败)
客户端重启Dbever, 连接还在.
客户端重启操作系统, 连接也还在.
应该就是在数据库层面hang死了.
服务端操作系统层kill (成功)
kill -9 pid
操作系统上kill之后正常. 可以执行之前失败的sql了.
原文地址:https://cloud.tencent.com/developer/article/2076992
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。