MySQL 命令查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
show full processlist;
# `show processlist` 命令查询了当前操作 MySQL 数据库的所有运行着的线程,发现 `xxxx` 数据库的好多连接线程都处于 *Sleep* 状态,这种状态表示等待客户端发送操作请求,并且随着时间的推移,*Time* 一栏的数值会越来越大,重启连接数据库的应用后这种情况消失,随着访问的增多又逐渐出现了这种现象。*Time* 一栏的时间数值也呈降序排列,此时的访问量并不高,说明每次访问数据库建立的连接可能没有被关闭,导致连接池饱和,出现连接请求超时的问题,也就是说有连接泄露的问题。
# 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。
show status like '%Aborted_clients%'
Aborted_clients 107812
# 尝试已经失败的MySQL服务器的连接的次数。
show status like '%Aborted_connects%'
Aborted_connects 42
show status like '%Connections%'
Connection_errors_max_connections 0
Connections 3689200 #试图连接MySQL服务器的次数。
Max_used_connections 3089
Max_used_connections_time 2018-11-15 08:57:14
show status like 'Threads%';
Threads_cached 78
Threads_connected 2968
Threads_created 19936 #Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器
Threads_running 3 #Threads_connected 跟 show processlist 结果相同,表示当前连接数。准确的来说,Threads_running 是代表当前并发数
show variables like '%max_connections%';
max_connections 4532
show variables like 'thread_cache_size';
|
造成 Sleep 连接过多的原因?
- 程序中可能存在没有及时关闭 MySQL 连接的情况;
- 数据库查询不够优化,查询比较耗时;
- 使用了太多持久连接;
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。