來源:MSSQL123 ,
www.cnblogs.com/wy123/p/9259783.html
general log&slow; query log
對於MySQL的一般查詢日誌和慢查詢日誌,開啟比較簡單,其中公用的一個引數是log_output,log_output控制著慢查詢和一般查詢日誌的輸出方向可以是表(mysql.general_log,mysql.slow_log)或者檔案(有引數general_log_file和slow_query_log_file配置決定)或者同時輸出到表和檔案(想不明白,什麼時候需要同時輸出到表和檔案)。
但是兩者受log_output引數影響,輸出的標的總是一致的,也就是要麼都寫入表,或者要麼都寫入檔案,不會一個輸出到表,一個輸出到檔案。
–slow log 相關引數
select *
from performance_schema.global_variables
where variable_name in
(‘slow_query_log’,’log_output’,’slow_query_log_file’,’long_query_time’)
–general log 相關引數
select *
from performance_schema.global_variables
where variable_name in
(‘general_log’,’log_output’,’general_log_file’)
對於上述兩種日誌,系統預設不會清理,因此在開啟了相關日誌之後,需要人為清理。
如何清理歷史general log&slow; query log
1,當輸出標的為表的時候
無法直接刪除,如果直接刪除的話,會出現“ERROR 1556 (HY000): You can’t use locks with log tables.”的錯誤提示
以general log為例,需要先關閉general_log,然後重新命名general_log這個表,
在對重新命名之後的表執行刪除,最後在重新命名回來,最後開啟general_log(如果有必要的話)
SET GLOBAL general_log = ‘OFF’;
RENAME TABLE general_log TO general_log_temp;
DELETE FROM general_log_temp WHERE event_time < DATE(NOW());
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = ‘ON’;
–slow log 同理
SET GLOBAL slow_query_log = ‘OFF’;
RENAME TABLE slow_log TO slow_log_temp;
DELETE FROM slow_log_temp WHERE start_time < DATE(NOW());
RENAME TABLE slow_log_temp TO slow_log;
SET GLOBAL slow_query_log = ‘ON’;
如果對重新命名之後的表(general_log或者是slow_log)沒有再次重新命名回來,會發生什麼?
參加如下截圖,如果沒有找到對應的表(general_log或者是slow_log),在輸出標的為表的情況下,會提示無法找到對應的表,將無法開啟對應的日誌
2,當輸出標的為檔案的時候
當輸出標的為檔案的時候,在linux下,直接使用rm命名刪除即可,如果在開啟了一般查詢日誌或者是慢查詢日誌,刪除對應的日誌檔案,並不影響資料庫的正常使用。網上有說需要停止MySQL服務然後重新命名檔案然後在建立新的檔案啥的,在Linux下並不是必須的,不知道在windows下是什麼情況,沒興趣試。
當然也不是說就建議始終這種暴力的方式清理日誌檔案,在Linux下,刪除了預設的日誌檔案(或者重新命名了原日誌檔案),要想再次生成日誌檔案
-
可以使用mysqladmin flush-logs
-
是SQL命令flush slow logs;flush general logs;
-
重啟MySQL服務
均可重新生成對應的日誌檔案。
註意:當對應的檔案是存在的時候,上述命名執行之後是沒有影響的(也不會清理對應的日誌檔案)
以下偏離主題
當輸出標的為表的時候的解析
不管是general_log或者是slow_log,對應的SQL陳述句都是二進位制格式的,需要使用convert(sql_text using UTF8)做一個轉換,才變得具有可讀性。
當輸出標的為表的時候對效能的影響
據個人測試,在請求量不大的資料庫上,開啟general_log或者是slow_log,對效能影響並沒有非常明顯。理論家們一方面強調說MySQL的處理併發上多強悍,一方面又說開啟general_log對效能影響很大,會不會自相矛盾呢?關於general_log,在zabbix監控下,測試環境TPS不過百的情況下(每秒寫入general log不超過100條資料),開啟general_log之後並CPU負載幾乎沒有變化,CPU高點是在做其他壓力測試。尤其是slow_log這種寫入不是太頻繁的日誌,直接寫入到表中,對效能的影響有限,比後面再去花時間解析檔案……
當然不排除TPS在上千或者上萬甚至更高之後,開啟general_log會產生較大的影響,當然沒事也不會閑的蛋疼去開general_log。
●編號378,輸入編號直達本文
●輸入m獲取文章目錄
Web開發
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。