1. 程式人生 > >mysql-慢查詢-開啟與設定

mysql-慢查詢-開啟與設定

在mysql中可以開啟慢查詢日誌,來使mysql自動記錄那些執行時間超過設定的閥值的sql語句,從而方便我們進行鍼對性的優化。
開啟慢查詢日誌
在mysql中,慢查詢日誌預設是關閉的。

mysql> show variables like "log_slow%";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| log_slow_queries | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

那首先要做的就是將慢查詢日誌記錄這個功能開啟。

mysql> set global log_slow_queries=ON;
Query OK, 0 rows affected, 1 warning (0.00 sec)

好了,這樣就把慢查詢功能打開了。
還有一條warning,看一下是什麼東西。

mysql> show warnings;
+---------+------+-----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message | +---------+------+-----------------------------------------------------------------------------------------------------------------------+ | Warning | 1287 | The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead | +---------+------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

噢,原來是告訴我們”log_slow_queries“這個變數將被移除了,以後要使用”slow_query_log“進行替代,挺好,這個新的更貼合一些。
看一下這個新的變數情況。

mysql> show variables like "slow_query_log";
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.00 sec)

OK,功能開啟了之後,就需要設定查詢時間的閥值了,這個閥值表示超過這個時間的sql查詢,就會被記錄到慢查詢日誌檔案中。

mysql> show variables like "long_query_time";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 10.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql中這個閥值預設的設定是10秒,這實在是太太太太長了,修改一下,對我們來說,超過1秒的,基本就需要觀察一下了。(如果你把這個值設定為0,那所有的查詢都將會被記錄,不過這樣通常沒有什麼意義)

mysql> set long_query_time=1;
Query OK, 0 rows affected (0.00 sec)

OK,將閥值設定為1秒了,這樣只要超過這個閥值的查詢,就會被記錄到日誌中了。
可能有的同學要問了,這個慢查詢日誌是在哪裡呀,可以從系統中看到。

mysql> show variables like "slow%";
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| slow_launch_time    | 2                                      |
| slow_query_log      | ON                                     |
| slow_query_log_file | /var/lib/mysql/****-slow.log |
+---------------------+----------------------------------------+
3 rows in set (0.00 sec)

slow_query_log_file指明瞭慢查詢日誌所在的具體位置。