最近我注意到在一天凌晨我的网站上加载的AJAX数据非常慢。使用Chrome浏览器中的Web Developer功能,通常的300-500ms等待速度和100-300ms接收可以增加最多5秒!该站点使用jQuery,Codeigniter / PHP和MySQL。
我查看了我的VPS的支持台,他们提到有太多的睡眠查询。
There are many sleep queries for the database 'databasename'.
| 4341 | mysqluser | 204.197.252.106:48669 | databasename | Sleep | 19 | | |
| 4373 | mysqluser | 204.197.252.106:59966 | databasename | Sleep | 78 | | |
| 4387 | mysqluser | 204.197.252.106:34807 | databasename | Sleep | 46 | | |
| 4388 | mysqluser | 204.197.252.106:35099 | databasename | Sleep | 6 | | |
| 4390 | mysqluser | 204.197.252.106:35452 | databasename | Sleep | 26 | | |
| 4391 | mysqluser | 204.197.252.106:35589 | databasename | Sleep | 7 | | |
| 4392 | mysqluser | 204.197.252.106:35680 | databasename | Sleep | 19 | | |
| 4393 | mysqluser | 204.197.252.106:36264 | databasename | Sleep | 12 | | |
| 4394 | mysqluser | 204.197.252.106:36327 | databasename | Sleep | 11 | | |
这是早上减速的原因吗?我怎样才能找出导致减速的原因并摆脱它?
答案 0 :(得分:7)
这些 sleep 查询只是打开的连接。除非数百人,否则我不会被他们困扰。很可能他们正在构建您的框架/ ORM正在使用的连接池。
要通过慢查询诊断问题,您需要获取slow query log。如果关闭慢速查询日志记录,请立即将其打开。
获得合适的日志文件后,您需要使用explain分析运行缓慢的查询。解释将允许查看Mysql的查询计划程序和分析器如何执行您的查询。
此处还将解释的输出粘贴到此处运行速度最慢的查询以及表格架构,以便我们更好地诊断您的问题。
答案 1 :(得分:0)
如果你想杀死睡眠连接你可以这样做: 以admin身份登录Mysql:
mysql -uroot -ppassword;
而不是运行命令:
mysql> show processlist;
您将获得以下内容:
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
| 49 | application | 192.168.44.1:51718 | XXXXXXXX | Sleep | 183 | | NULL ||
| 55 | application | 192.168.44.1:51769 | XXXXXXXX | Sleep | 148 | | NULL |
| 56 | application | 192.168.44.1:51770 | XXXXXXXX | Sleep | 148 | | NULL |
| 57 | application | 192.168.44.1:51771 | XXXXXXXX | Sleep | 148 | | NULL |
| 58 | application | 192.168.44.1:51968 | XXXXXXXX | Sleep | 11 | | NULL |
| 59 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+-------------+--------------------+----------+---------+------+-------+------------------+
您将看到不同连接的完整详细信息。现在你可以杀死睡眠连接,如下所示:
mysql> kill 52;
Query OK, 0 rows affected (0.00 sec)