tbase执行select * from table_name limit 10 无反应

[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');

image.png

查看对应的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'));

image.png

解决方案

问题就是这条SQL引起的, 所以决定kill这个会话

数据库层kill (失败)

select pg_cancel_backend('pid');  -- 返回t, 但sql还在执行
select pg_terminate_backend('pid'); --同上

客户端层重启 (失败)

客户端重启Dbever, 连接还在.

客户端重启操作系统, 连接也还在.

应该就是在数据库层面hang死了.

服务端操作系统层kill (成功)

kill -9 pid

操作系统上kill之后正常. 可以执行之前失败的SQL了.

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...