關於long_query_time的設定,可不可以說是mysql的一個小小bug呢
我們知道對對於MySQL的日誌功能,我們可以完全自己控制到底寫還是不寫。一般來說,binlog我們一般會開啟,而對於慢查詢我們一般會在開發的時候除錯和觀察SQL語句的執行速度。但今天發現一個問題。在使用show variables like 'log%';檢視slow日誌是否開啟時,發現為OFF,使用set global log_low_queries=on;成功了。而使用show variales like 'long%'時發現是10,於是想把它修改成1,照葫蘆畫瓢使用set global long_query_time=1,再一次查詢發現還是10。乖乖砸了,使用select sleep(10),記錄了日誌,而是用select sleep(1)確實沒有被記錄。而且設定的返回記錄是:
mysql> set global long_query_time=1;
Query OK, 0 rows affected (0.00 sec)
難道真的沒有改變嗎,忽然想到是不是需要重啟伺服器呢,想應該不是吧,我又不是修改配置檔案。最後想重新開一個會話看如何。重新開一個會話查詢show variables like 'long%';果然被修改了。那為什麼在修改它的視窗沒有反映出來呢。不解。
希望遇到這種情況的朋友不要向我一樣在一個會話中不停的試。找原因,直接開過視窗就可以試驗了。
另外,將MySQL慢查詢日誌寫入表的的設定為。set global log_output='TABLE';
和慢查詢相關的還有一個引數是log_queries_not_using_indexes;用來設定是否記錄沒有使用索引的查詢。開啟該查詢後,如果你的日誌是記錄到表中的,那麼你每次顯示慢日誌語句的時候,從該表中的查詢記錄也會被新增進行。
如果日誌是寫在檔案中。用mysqldumpslow工具可以對慢查詢日誌檔案進行瀏覽。該工具我也沒使用過,用了後在介紹了。