mysql 慢查詢日誌
阿新 • • 發佈:2018-12-19
有時候在測試環境中開發,並不一定能在開發階段解決現有問題,比如由於資料量不對稱,擼的程式碼在測試環境跑的好好的,但在現網環境超時或相應很慢,這時就需要揪出來是哪塊出了問題,哪條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 表示執行時間。