您好,登錄后才能下訂單哦!
本文主要給大家介紹MySQL提供的一種日志記錄-慢日志查詢,其所涉及的東西,從理論知識來獲悉,有很多書籍、文獻可供大家參考,從現實意義角度出發,億速云累計多年的實踐經驗可分享給大家。
慢日志查詢
MySQL的慢日志查詢是MySQL提供的一種日志記錄,它用了記錄在MySql中響應時間超過閾值的語句,具體運行時間超過long_query_time值的SQL,則會被記錄到慢日志中。long_query_time的默認時間為10,意思是運行10以上的語句。
比如一條sql執行超過5秒鐘,我們就算慢SQL,MySQL會記錄超過5秒的sql,我們可以結合explain進行全面分析。
默認情況下,MySQL數據庫沒有開啟慢查詢日志,需要我們手動來設置這個參數。當然,如果不是調優需要,一般不建議啟動該參數,因為慢日志會或多或少帶來一定的性能影響。
是否開啟以及設置
#查看是否開啟
show variables like '%slow_query_log%';
#開啟
set global slow_query_log = 1;
使用set global slow_query_log=1開啟了慢查詢日志只對當前數據庫生效,如果MySQL重啟后則會失效。如果要永久生效,就必須修改配置文件my.cnf。
注意設置慢查詢閾值時間后,你可能看不到值發生了變化,即沒有生效,這時需要重新連接或新開一個會話才能看到修改值。
show variables like '%long_query_time%'
或者不重開連接也可以使用下面的命令:
show variables like '%long_query_time%'
哪些sql會被慢日志記錄,這是由參數long_query_time控制,默認情況下long_query_time的值為10秒,命令:
show variables like '%long_query_time%';
假如運行時間正好等于long_query_time的情況,并不會被記錄下來。也就是說,在mysql是判斷大于long_query_time,而非大于等于。
查看慢日志條數
show global status like '%slow_queries%'
日志分析工具mysqldumpslow
在生產環境中,如果要手工分析日志,查找、分析SQL,顯然是個體力活,MySql提供了日志分析工具mysqldumpslow。
例如:
#得到返回記錄集最多的10個SQL
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log
#得到訪問次數最多的10個SQL
Mysqldumpslow –s c –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log
#得到按照時間排序的前10條里面含有左連接的查詢
Mysqldumpslow –s t –t 10 –g “left join” D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log
#另外建議在使用這些命令時結合|和more使用,否則可能出現爆破情況
Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log|more
參數含義
s: 表示按照何種方式排序
c:訪問次數
l:鎖定時間
r:返回記錄
t:查詢時間
al:平均鎖定時間
t:返回前面多少條的數據
g:后面搭配一個正則表達式
用show profile進行sql分析
show profile命令可以分析當前會話中語句執行的資源消耗情況。用于查找SQL耗時瓶頸 。默認處于關閉狀態,并保存最近15次的運行結果。
查看是否開啟(show variables like ‘profiling’;)
開啟功能(set profiling = on;)
開啟之后就可以記錄接下來sql的運行情況。之后通過show profiles來查看結果:
進一步通過命令(show profile cpu, block io for query 3;)分析某個SQL語句執行情況,例如下面分析3號SQL的情況。
Show profile后面的一些參數:
All:顯示所有的開銷信息
Block io:顯示塊IO相關開銷
Context switches: 上下文切換相關開銷
Cpu:顯示cpu相關開銷
Memory:顯示內存相關開銷
Source:顯示和source_function,source_file,source_line相關的開銷信息
全局查詢日志
(永遠不要在生產環境開啟,查看所有執行的SQL語句)
設置命令:
set global general_log = 1;
#以表的形式輸出
set global log_output = ‘TABLE’
此后,mysql所執行的SQL語句將會記錄到mysql.genearl_log表,可用下面的命令查看:
select * from mysql.general_log;
也可以在配置文件中配置,設置如下:
#開啟
General_log = 1
#記錄日志文件的路徑
General_log_file = D://path/logfile
#輸出格式
Log_output=file
看了以上MySQL提供的一種日志記錄-慢日志查詢介紹,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,大家可以繼續關注億速云行業資訊板塊,會定期給大家更新行業新聞和知識,如有需要更加專業的解答,可在官網聯系我們的24小時售前售后,隨時幫您解答問題的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。