溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL慢日志的意思是什么

發(fā)布時(shí)間:2021-06-24 11:05:11 來源:億速云 閱讀:178 作者:chen 欄目:數(shù)據(jù)庫

這篇文章主要介紹“MySQL慢日志的意思是什么”,在日常操作中,相信很多人在MySQL慢日志的意思是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MySQL慢日志的意思是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

前言:

慢日志在日常數(shù)據(jù)庫運(yùn)維中經(jīng)常會(huì)用到,我們可以通過查看慢日志來獲得效率較差的 SQL ,然后可以進(jìn)行 SQL  優(yōu)化。本篇文章我們一起來學(xué)習(xí)下慢日志相關(guān)知識(shí)。

1.慢日志簡(jiǎn)介

慢日志全稱為慢查詢?nèi)罩?Slow Query Log),主要用來記錄在 MySQL 中執(zhí)行時(shí)間超過指定時(shí)間的 SQL  語句。通過慢查詢?nèi)罩?,可以查找出哪些語句的執(zhí)行效率低,以便進(jìn)行優(yōu)化。

默認(rèn)情況下,MySQL 并沒有開啟慢日志,可以通過修改 slow_query_log 參數(shù)來打開慢日志。與慢日志相關(guān)的參數(shù)介紹如下:

  • slow_query_log:是否啟用慢查詢?nèi)罩?,默認(rèn)為0,可設(shè)置為0、1,1表示開啟。

  • slow_query_log_file:指定慢查詢?nèi)罩疚恢眉懊Q,默認(rèn)值為host_name-slow.log,可指定絕對(duì)路徑。

  • long_query_time:慢查詢執(zhí)行時(shí)間閾值,超過此時(shí)間會(huì)記錄,默認(rèn)為10,單位為s。

  • log_output:慢查詢?nèi)罩据敵瞿繕?biāo),默認(rèn)為file,即輸出到文件。

  • log_timestamps:主要是控制 error log、slow log、genera log 日志文件中的顯示時(shí)區(qū),默認(rèn)使用UTC時(shí)區(qū),建議改為  SYSTEM 系統(tǒng)時(shí)區(qū)。

  • log_queries_not_using_indexes:是否記錄所有未使用索引的查詢語句,默認(rèn)為off。

  • min_examined_row_limit:對(duì)于查詢掃描行數(shù)小于此參數(shù)的SQL,將不會(huì)記錄到慢查詢?nèi)罩局?,默認(rèn)為0。

  • log_slow_admin_statements:慢速管理語句是否寫入慢日志中,管理語句包含 alter table、create index  等,默認(rèn)為 off 即不寫入。

一般情況下,我們只需開啟慢日志記錄,配置下閾值時(shí)間,其余參數(shù)可按默認(rèn)配置。對(duì)于閾值時(shí)間,可靈活調(diào)整,比如說可以設(shè)置為 1s 或 3s 。

2.慢日志實(shí)戰(zhàn)

在配置文件中,我們可以設(shè)置以下幾個(gè)慢日志相關(guān)參數(shù):

# 慢查詢?nèi)罩鞠嚓P(guān)配置,可根據(jù)實(shí)際情況修改 vim /etc/my.cnf  [mysqld]  slow_query_log = 1 slow_query_log_file = /data/mysql/logs/slow.log long_query_time = 1 log_timestamps = SYSTEM log_output = FILE

下面我們具體看下,慢日志會(huì)記錄哪些內(nèi)容?我們執(zhí)行一條較慢的查詢 SQL ,來看下在慢日志中的體現(xiàn)。

# 該條SQL執(zhí)行時(shí)間超過閾值  # Time: 2021-05-13T17:38:03.687811+08:00 # User@Host: root[root] @  [192.168.85.0]  Id: 2604943 # Query_time: 1.099889  Lock_time: 0.000144 Rows_sent: 39  Rows_examined: 45305 SET timestamp=1620898683; select * from test_table where col_name like '%測(cè)試%';

如果啟用了慢速查詢?nèi)罩?,并且選擇了 FILE 作為輸出目標(biāo),則寫入日志的每個(gè)語句都以 # 字符開頭。對(duì)于每一組慢SQL,第一行記錄的是該條 SQL  執(zhí)行的時(shí)刻(如果 log_timestamps 參數(shù)為 UTC ,則改時(shí)間會(huì)顯示 UTC 時(shí)區(qū)時(shí)間),第二行記錄的是執(zhí)行該語句的用戶和 IP 以及鏈接 id  ,第三行的幾個(gè)字段解釋如下:

  • Query_time: duration 語句執(zhí)行時(shí)間,以秒為單位。

  • Lock_time: duration 獲取鎖的時(shí)間(以秒為單位)。

  • Rows_sent: N 發(fā)送給 Client 端的行數(shù)。

  • Rows_examined: N 服務(wù)器層檢查的行數(shù)(不計(jì)算存儲(chǔ)引擎內(nèi)部的任何處理)。

下面兩行分別是此語句執(zhí)行時(shí)候的時(shí)間戳和具體慢 SQL 。

在實(shí)際環(huán)境下,不建議開啟 log_queries_not_using_indexes  參數(shù),此參數(shù)打開后可能導(dǎo)致慢日志迅速增長(zhǎng)。對(duì)于慢日志的篩選與分析,我們可以借助 mysqldumpslow、pt-query-digest  等工具來分析。對(duì)于慢日志文件,要定期進(jìn)行歸檔處理,比如可以暫時(shí)關(guān)閉慢日志,然后將舊文件重命名,之后再開啟慢日志,這樣就會(huì)寫入新的日志文件中,有效減小日志體積。

到此,關(guān)于“MySQL慢日志的意思是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI