2012-04-28 37 views
2

最近我一直注意到在我的網站上一天的早些時候非常緩慢的加載AJAX數據。使用Chrome瀏覽器中的Web Developer功能,300-500ms Wait和100-300ms Receive的通常速度可以增加5秒!該網站使用jQuery,Codeigniter/PHP和MySQL。緩慢的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 | | | 

這是造成早晨變慢的原因嗎?我怎樣才能找出造成經濟放緩的原因並擺脫它?

回答

6
  1. 這些sleep查詢只是打開的連接。除非他們有數百人,否則我不會爲他們而煩惱。他們很可能正在形成您的框架/ ORM正在使用的連接池。

  2. 若要診斷緩慢查詢的問題,您需要獲得slow query log。如果關閉了慢速查詢記錄,請立即將其打開。

  3. 一旦你有一個合適的日誌文件,你將需要分析explain與緩慢運行的查詢。解釋將允許查看Mysql的查詢規劃器和分析器如何執行您的查詢。

  4. 同時將解釋的輸出粘貼到最慢的運行查詢以及表模式中,以便我們可以更好地診斷您的問題。

+1

可能意味着用戶正在使用持久連接,這可能是一件壞事。 – Evert 2012-04-28 12:11:14

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)