数据库链接抖升,如何排查具体是什么链接?

几乎没有有用的信息 :joy:

:joy:这个集群还是从v4升级到v7的,不知道有没有隐藏的坑

Connection Count中的连接数浮动还是很大的,kill掉的是那类SQL ,是sleep吗

根据statements_summary查了一下,1055个sleep连接,执行的都是commit语句。既然执行了commit,不应该自动释放吗?


终于破案了,还是应用端的问题,没有释放连接。

总结一下解决方案:
1、查询Sleep的连接,按sql指纹汇总

SELECT 
    DIGEST,COUNT(1) 
FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST
WHERE COMMAND = 'Sleep'
GROUP BY DIGEST
ORDER BY COUNT(1) DESC;

2、查询最高的sql指纹对应的sql语句,DIGEST_TEXT就是对应的sql语句。

SELECT 
    DIGEST,DIGEST_TEXT,PREV_SAMPLE_TEXT 
FROM INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY
WHERE DIGEST = '9505cacb7c710ed17125fcc6cb3669e8ddca6c8cd8af6a31f6b3cd64604c3098';

3、根据拿到的sql语句反推调用方。本次拿到的sql语句是COMMIT,可以得到事务已提交但连接未释放的结论,排除了是大事务未提交的原因。最后根据具体业务排查到是应用端某个业务提交事务后,未释放连接导致的,修改应用端后,连接数正常。

2 个赞

:yum:收回我之前的话,确实是根据这个表完美解决了。

这种情况dashborad没有体现的话,建议自己说个定时任务,把show processlist记录下来,这样根据时间点去找一下就OK了。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。