[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这个会话
select pg_cancel_backend('pid'); -- 返回t, 但sql还在执行
select pg_terminate_backend('pid'); --同上
客户端重启Dbever, 连接还在.
客户端重启操作系统, 连接也还在.
应该就是在数据库层面hang死了.
kill -9 pid
操作系统上kill之后正常. 可以执行之前失败的SQL了.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。