中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

MySQL 一般查詢?nèi)罩净蛘呗樵內(nèi)罩練v史數(shù)據(jù)的清理

2018-07-25    來源:importnew

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

general log&slow query log

對于MySQL的一般查詢?nèi)罩竞吐樵內(nèi)罩,開啟比較簡單,其中公用的一個(gè)參數(shù)是log_output,log_output控制著慢查詢和一般查詢?nèi)罩镜妮敵龇较?/span>可以是表(mysql.general_log,mysql.slow_log)或者文件(有參數(shù)general_log_file和slow_query_log_file配置決定)或者同時(shí)輸出到表和文件(想不明白,什么時(shí)候需要同時(shí)輸出到表和文件)。

但是兩者受log_output參數(shù)影響,輸出的目標(biāo)總是一致的,也就是要么都寫入表,或者要么都寫入文件,不會一個(gè)輸出到表,一個(gè)輸出到文件。

--slow log 相關(guān)參數(shù)
select * 
from performance_schema.global_variables 
where variable_name in
('slow_query_log','log_output','slow_query_log_file','long_query_time')

--general log 相關(guān)參數(shù)
select * 
from performance_schema.global_variables 
where variable_name in
('general_log','log_output','general_log_file')

對于上述兩種日志,系統(tǒng)默認(rèn)不會清理,因此在開啟了相關(guān)日志之后,需要人為清理。

如何清理歷史general log&slow query log

1,當(dāng)輸出目標(biāo)為表的時(shí)候

無法直接刪除,如果直接刪除的話,會出現(xiàn)“ERROR 1556 (HY000): You can’t use locks with log tables.”的錯(cuò)誤提示

以general log為例,需要先關(guān)閉general_log,然后重命名general_log這個(gè)表,

在對重命名之后的表執(zhí)行刪除,最后在重命名回來,最后開啟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)沒有再次重命名回來,會發(fā)生什么?

參加如下截圖,如果沒有找到對應(yīng)的表(general_log或者是slow_log),在輸出目標(biāo)為表的情況下,會提示無法找到對應(yīng)的表,將無法開啟對應(yīng)的日志

2,當(dāng)輸出目標(biāo)為文件的時(shí)候

當(dāng)輸出目標(biāo)為文件的時(shí)候,在linux下,直接使用rm命名刪除即可,如果在開啟了一般查詢?nèi)罩净蛘呤锹樵內(nèi)罩,刪除對應(yīng)的日志文件,并不影響數(shù)據(jù)庫的正常使用。網(wǎng)上有說需要停止MySQL服務(wù)然后重命名文件然后在創(chuàng)建新的文件啥的,在Linux下并不是必須的,不知道在windows下是什么情況,沒興趣試。

當(dāng)然也不是說就建議始終這種暴力的方式清理日志文件,在Linux下,刪除了默認(rèn)的日志文件(或者重命名了原日志文件),要想再次生成日志文件

  • 可以使用mysqladmin flush-logs
  • 是SQL命令flush slow logs;flush general logs;
  • 重啟MySQL服務(wù)

均可重新生成對應(yīng)的日志文件。

注意:當(dāng)對應(yīng)的文件是存在的時(shí)候,上述命名執(zhí)行之后是沒有影響的(也不會清理對應(yīng)的日志文件)

以下偏離主題

當(dāng)輸出目標(biāo)為表的時(shí)候的解析

不管是general_log或者是slow_log,對應(yīng)的SQL語句都是二進(jìn)制格式的,需要使用convert(sql_text using UTF8)做一個(gè)轉(zhuǎn)換,才變得具有可讀性。

當(dāng)輸出目標(biāo)為表的時(shí)候?qū)π阅艿挠绊?/h3>

據(jù)個(gè)人測試,在請求量不大的數(shù)據(jù)庫上,開啟general_log或者是slow_log,對性能影響并沒有非常明顯。理論家們一方面強(qiáng)調(diào)說MySQL的處理并發(fā)上多強(qiáng)悍,一方面又說開啟general_log對性能影響很大,會不會自相矛盾呢?關(guān)于general_log,在zabbix監(jiān)控下,測試環(huán)境TPS不過百的情況下(每秒寫入general log不超過100條數(shù)據(jù)),開啟general_log之后并CPU負(fù)載幾乎沒有變化,CPU高點(diǎn)是在做其他壓力測試。尤其是slow_log這種寫入不是太頻繁的日志,直接寫入到表中,對性能的影響有限,比后面再去花時(shí)間解析文件……  

當(dāng)然不排除TPS在上千或者上萬甚至更高之后,開啟general_log會產(chǎn)生較大的影響,當(dāng)然沒事也不會閑的蛋疼去開general_log。

標(biāo)簽: linux Mysql 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:iOS-性能優(yōu)化深入探究

下一篇:J-IM v2.2.0 發(fā)布,所有消息體支持可擴(kuò)展