1. 程式人生 > >mysql 慢查詢日誌

mysql 慢查詢日誌

有時候在測試環境中開發,並不一定能在開發階段解決現有問題,比如由於資料量不對稱,擼的程式碼在測試環境跑的好好的,但在現網環境超時或相應很慢,這時就需要揪出來是哪塊出了問題,哪條sql 執行過慢了。這時就需要在mysql 服務端設定一個時間閾值,超過該閾值就判定是慢查詢,並優化之。

檢視慢查詢日誌是否開啟:

mysql> show variables like '%slow%';
+---------------------------+-------------------------------------+
| Variable_name             | Value                               |
+---------------------------+-------------------------------------+
| log_slow_admin_statements | OFF                                 |
| log_slow_slave_statements | OFF                                 |
| slow_launch_time          | 2                                   |
| slow_query_log            | OFF                                 |
| slow_query_log_file       | /usr/local/mysql/var/zhang-slow.log |
+---------------------------+-------------------------------------+
5 rows in set (0.02 sec)

mysql> 

上面的變數中slow_query_log  的值為OFF,即表示慢查詢日誌是關閉狀態。慢查詢日誌檔案是/usr/local/mysql/var/zhang-slow.log 。

我們開啟慢查詢日誌,並且將時間閾值設定為1秒。

首先檢視預設時間閾值:

mysql> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
|         10.000000 |
+-------------------+
1 row in set (0.00 sec)

mysql> 

可以看到預設是10秒,這裡設定為1秒 。long_query_time = N 超過該時間臨界點,就判定為慢查詢(這裡為1 秒)。

mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (0.05 sec)

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

mysql> 

然後 執行 事先準備好的sql :

可以看到,執行時間已超過所設定的時間閾值。下面去慢查詢日誌檔案檢視下,剛才的 sql 語句有沒有記錄進去。

其中Query_time 表示執行時間。