公司开发反应数据库加载慢,mongodb和mysql的负载较高;后进入mysql中发现,sleep进程特别多,如下:

mysql> show full processlist;
+-------+------+----------------------+-------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-------+------+----------------------+-------+---------+------+-------+-----------------------+
| 14 | root | 192.168.138.12:36854 | DMUSS | Sleep | 0 | | NULL |
| 73 | root | 192.168.138.12:36870 | DMUSS | Sleep | 3 | | NULL |
| 78 | root | 192.168.138.12:36886 | DMUSS | Sleep | 1 | | NULL |
| 72800 | root | 223.71.188.222:53298 | DMUSS | Sleep | 1450 | | NULL |
| 72978 | root | 223.71.188.222:64691 | DMUSS | Sleep | 1347 | | NULL |
| 72979 | root | 223.71.188.222:63611 | NULL | Sleep | 1346 | | NULL |
| 73009 | root | 223.71.188.222:63617 | DMUSS | Sleep | 1336 | | NULL |
| 73016 | root | 223.71.188.222:64727 | DMUSS | Sleep | 1337 | | NULL |
| 73518 | root | localhost | NULL | Query | 0 | init | show full processlist |
| 73709 | root | 223.71.188.222:63821 | DMUSS | Sleep | 1028 | | NULL |
| 73712 | root | 223.71.188.222:54680 | DMUSS | Sleep | 1027 | | NULL |
| 73714 | root | 223.71.188.222:63826 | DMUSS | Sleep | 1026 | | NULL |
| 73723 | root | 223.71.188.222:63828 | DMUSS | Sleep | 1021 | | NULL |
| 73942 | root | 223.71.188.222:55011 | DMUSS | Sleep | 681 | | NULL |
| 73943 | root | 223.71.188.222:55012 | DMUSS | Sleep | 698 | | NULL |
| 74250 | root | 223.71.188.222:65397 | DMUSS | Sleep | 771 | | NULL |
| 74266 | root | 223.71.188.222:65408 | DMUSS | Sleep | 765 | | NULL |
| 74289 | root | 223.71.188.222:65415 | DMUSS | Sleep | 757 | | NULL |
| 76719 | root | 223.71.188.222:57470 | DMUSS | Sleep | 0 | | NULL |
+-------+------+----------------------+-------+---------+------+-------+-----------------------+
19 rows in set (0.00 sec)

sleep进程严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃。

下面是mysql手册给出的解释:

1)客户端程序在退出之前没有调用mysql_close()。[写程序的疏忽,或者数据库的db类库没有自动关闭每次的连接]

2)客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器。[类似常连,类似于不完整的tcp ip协议构造,服务端一直认为客户端仍然存在(有可能客户端已经断掉了)]

3)客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了。[参看:tcp ip协议的三次握手]

造成睡眠连接过多的原因?

1)使用了太多持久连接。

2)程序中,没有及时关闭mysql连接。

3)数据库查询不够优化,过度耗时。

解决方法

wait_timeout, 即可设置睡眠连接超时秒数,如果某个连接超时,会被mysql自然终止

修改mysql配置文件

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
skip-name-resolve
query_cache_type = 1
wait_timeout = 20

interactive_timeout=20

重启mysql

mysql> show global variables like '%timeout';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout |  20 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| wait_timeout | 20 |
+-----------------------------+----------+
12 rows in set (0.00 sec)

mysql> show full processlist;
+----+------+---------------------+-------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+---------------------+-------+---------+------+-------+-----------------------+
| 66 | root | 192.168.138.12:57028 | DMUSS | Sleep | 0 | | NULL |
| 69 | root | 192.168.138.12:57044 | DMUSS | Sleep | 2 | | NULL |
| 71 | root | 192.168.138.12:57048 | DMUSS | Sleep | 3 | | NULL |
| 78 | root | localhost | NULL | Query | 0 | init | show full processlist |
+----+------+---------------------+-------+---------+------+-------+-----------------------+

mysql的配置文件中,有一项:

不停实例:
mysql> set global interactive_timeout=30;

Query OK, 0 rows affected (0.00 sec)

mysql> set global wait_timeout=30;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%timeout';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 30 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| wait_timeout | 30 |
+-----------------------------+----------+
12 rows in set (0.00 sec)

生效;

mysql> show variables like '%timeout'; 看不到配置生效;

说法1:interactive_timeout和wait_timeout的默认值都是28800(8小时)当这两个参数同时出现在里时,会以interactive_timeout的值为准。也就是说不管wait_timeout的值是多少,用show variables like '%timeout%';查看时显示的两个值都是一样的,并且都是interactive_timeout的值。

说法2:如果查询时使用的是show variables的话,会发现设置好像并没有生效,这是因为单纯使用show variables的话就等同于使用的是show session variables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。网络上很多人都抱怨说他们set global之后使用show variables查询没有发现改变,原因就在于混淆了会话变量和全局变量,如果仅仅想修改会话变量的话,可以使用类似set wait_timeout=10;或者set session wait_timeout=10;这样的语法。

当然,更根本的方法,还是从以上三点排查之:
1. 程序中,不使用持久链接,即使用mysql_connect而不是mysql_pconnect。
2.   程序执行完毕,应该显式调用mysql_close
3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之.

参考文章:https://yq.aliyun.com/ziliao/22247              https://www.cnblogs.com/azhqiang/p/5454000.html

转载于:https://www.cnblogs.com/Honeycomb/p/9796383.html

mysql sleep连接过多的问题解决相关推荐

  1. mysql sleep连接过多的完美解决办法

    睡眠连接过多,会对mysql服务器造成什么影响? 严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃. 造成睡眠连接过多的原因? 1. 使用了太多持久连接(个人觉得,在高并 ...

  2. Mysql 休眠连接过多,有可能导致“Too many connections”的错误

    查看所有连接 show processlist 设置休眠连接超时时间60秒: my.ini中mysqld节中添加 wait-timeout=60 可以解决Mysql.Data.dll连接释放后连接没有 ...

  3. mysql 遗失对主机的连接,MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...

    MySQL远程连接丢失问题解决方法(Lost connection to MySQL server) 最近服务器很不稳定,于是重装了mysql 和php 服务,但是接着却遇到了很头疼的麻烦. 远程连接 ...

  4. mysql错误连接次数过多_解决Mysql连接过多错误的方法

    问:怎样解决mysql连接过多的错误? 答:系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大 ...

  5. mysql内连接运算量会增加多少_新年手打,40道经典MYSQL面试干货,速来收藏

    MySQL 面试题 1.MySQL 中有哪几种锁? 1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最 高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发 ...

  6. mysql cannot connect_【IT专家】mysql远程访问cannot connect(10038) 问题解决的过程

    本文由我司收集整编,推荐下载,如有疑问,请与我司联系 mysql 远程访问 cannot connect(10038) 问题解决的过程 2016/05/23 9309 今天用 Navicat 访问虚拟 ...

  7. ubyntu 链接mysql_ubuntu mysql远程连接

    ubuntu mysql远程连接 http://blog.csdn.net/helen_shw/archive/2010/01/22/5224524.aspxkiki@kiki-desktop:/et ...

  8. pycharm与python连接_pycharm2017实现python3.6与mysql的连接

    本文为大家分享了pycharm2017上实现python3.6与mysql的连接方法,供大家参考,具体内容如下 与其他的IDE不同,pycharm不需要额外下载mydqldb包等,pycharm里可以 ...

  9. Mysql短连接风暴

    正常的短连接模式就是连接到数据库后,执行很少的 SQL 语句就断开,下次需要的时候再重连.如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的情况. 我在第 1 篇文章<基础架构: ...

最新文章

  1. Python告诉你这些旅游景点好玩、便宜、人又少!
  2. Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
  3. MySQL数据类型和运算符
  4. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
  5. linux下mtr命令,如何使用Linux mtr命令
  6. vbs获取群聊当前内容_通过VBS脚本批量检测服务器状态 - 易本地工作室-Ebend SoftwareNetwork Studio - 群发,采集,管理类软件定制开发服务【易本地工作室】...
  7. ipv6 neutron应用(一)
  8. python安装mysql模块_Python:使用pip安装MySQL-python模块
  9. Wireshark coloring rules tips
  10. 基于单片机的空气质量监测系统设计
  11. 数字电路中几种基本门电路
  12. mysql查看占用内存或者CPU高的SQL
  13. 【Python军火库】smtplib+email:一起来用Python发送电子邮件吧!
  14. codeforces202A. Mafia【二分】
  15. 使用Plink对SNP数据进行质量控制
  16. 视频质量诊断分析 视频质量诊断依据 视频质量诊断判断标准
  17. 《世界历史》学习记录
  18. osgEarth AnimationPath路径动画
  19. 【娱乐时间】漫威API 回味复联11年
  20. CAD中插入外部参照字体会变繁体_CAD外部参照插入后图形不匹配怎么办

热门文章

  1. python 教程 网盘-python教程网盘
  2. python有相关的证书可以考吗-python的证书
  3. python编程 语言-Python——最美丽的编程语言
  4. python爬虫流程-Python爬虫入门
  5. python3.7安装包-Python3.7.6下载
  6. python下载了怎么打开-下载python后如何启动
  7. python代码大全p-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
  8. python怎么画简单图片-Python绘制简易的二维图像
  9. python表白源代码-python七夕浪漫表白源码
  10. python基础代码事例-零基础学习Python开发练习100题实例(2)