【参赛作品73】MogDB/openGauss 通过活跃会话定位性能瓶颈

本文介绍了如何通过top命令和Mogdb数据库的系统视图来查找并分析消耗CPU最多的会话。作者展示了如何获取Mogdb进程PID,使用top命令查看高CPU线程,以及通过dbe_perf视图获取详细等待状态和会话信息。通过这些步骤,可以定位到导致高负载的SQL查询,从而进行优化,提升数据库效率。

作者:唐祖亮

通过 top命令获取消耗CPU最多的会话

• mogdb/opengauss使用多线程模式

• 获取mogdb pid

• ps -ef | grep mogdb

image.png

可以看到当前服务器上运行的Mogdb数据库的PID为22203.

• top –H –p

image.png
通过top命令查看占用cpu高的线程ID。

检查特定thread的信息 – dbe_perf.THREAD_WAIT_STATUS

• \d dbe_perf.THREAD_WAIT_STATUS
image.png

select tid,lwtid,query_id,wait_status,wait_event , block_sessionid • from dbe_perf.THREAD_WAIT_STATUS where lwtid = <os thread id> ;

image.png

检查特定session的信息 – dbe_perf.SESSION_STAT_ACTIVITY --dbe_perf.THREAD_WAIT_STATUS

\d dbe_perf.SESSION_STAT_ACTIVITY

image.png

\d dbe_perf.THREAD_WAIT_STATUS

image.png

select * from dbe_perf.session_stat_activity where pid=<db tid of thread>;

image.png

select pid,sessionid,tid,a.query_id,wait_event,query from dbe_perf.SESSION_STAT_ACTIVITY a,dbe_perf.THREAD_WAIT_STATUS b where pid=tid and lwtid = <os thread id>;

image.png
通过线程号关联dbe_perf.SESSION_STAT_ACTIVITY、dbe_perf.THREAD_WAIT_STATUS 两张视图查询出活跃会话的详细信息。
可以看到会话中执行的sql是两个表关联查看两个表的信息。
image.png
可以看到两张表是很大的而sql文本中没有对两张表进行条件过滤所以只能以全表扫描的方式进行NL连接导致占用大量CPU。我们通过分析活跃会话成功的定位了消耗高的会话和SQL,定位到问题之后进行处理优化便能降低数据库的负载提升数据库运行效率。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gauss松鼠会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值