前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tbase执行select * from table_name limit 10 无反应

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

原创
作者头像
大大刺猬
发布2022-08-19 10:40:59
6250
发布2022-08-19 10:40:59
举报
文章被收录于专栏:大大刺猬

[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

代码语言:sql
复制
select * from pg_locks aa where aa.relation in (select oid from pg_class where relname='sbtest1');
image.png
image.png

查看对应的SQL,发现为 大表之间的left join, 无where条件 (左表600w行, 13GB, 右表1000w行, dn,cn 内存均2GB....)

代码语言:sql
复制
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
image.png

解决方案

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

数据库层kill (失败)

代码语言:sql
复制
select pg_cancel_backend('pid');  -- 返回t, 但sql还在执行
select pg_terminate_backend('pid'); --同上

客户端层重启 (失败)

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

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

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

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

代码语言:shell
复制
kill -9 pid

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 适用范围
  • 问题概述
  • 问题原因
  • 解决方案
    • 数据库层kill (失败)
      • 客户端层重启 (失败)
        • 服务端操作系统层kill (成功)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档