2

最近,我注意到在一天的凌晨,我的网站上的 AJAX 数据加载非常缓慢。使用 Chrome 浏览器中的 Web Developer 功能,通常的 300-500ms Wait 和 100-300ms Receive 的速度最多可以增加 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 | | |

这是早上减速的原因吗?如何找出导致减速的原因并摆脱它?

4

2 回答 2

8
  1. 这些睡眠查询只是打开的连接。除非他们有数百个,否则我不会被他们打扰。他们很可能正在形成您的框架/ORM 正在使用的连接池。

  2. 要诊断慢查询问题,您需要获取慢查询日志。如果慢查询日志被关闭,请立即将其打开。

  3. 一旦你有了一个合适的日志文件,你就会想用explain分析运行缓慢的查询。解释将允许查看 Mysql 的查询计划器和分析器如何执行您的查询。

  4. 还要在此处将运行速度最慢的查询的解释输出与表模式一起粘贴,以便我们更好地诊断您的问题。

于 2012-04-28T11:56:49.680 回答
0

如果你想终止睡眠连接,你可以这样做: 以管理员身份登录 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)
于 2013-11-08T07:43:17.613 回答