一、背景? ?
????????MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,他用來記錄在MySQL中響應(yīng)的時(shí)間超過閾值的語句,具體指運(yùn)行時(shí)間超過long_query_time(默認(rèn)是10秒)值的SQL,會(huì)被記錄到慢查詢?nèi)罩局小?/p>
????????慢查詢?nèi)罩疽话阌糜谛阅芊治鰰r(shí)開啟,收集慢SQL然后通過explain進(jìn)行全面分析,一般來說,生產(chǎn)是不會(huì)開啟的,收集慢查詢語句是十分耗性能的,但是我們在測試環(huán)境是可以模擬分析的,優(yōu)化SQL語句,接下來就通過實(shí)戰(zhàn),講解如何開啟慢日志查詢以及如何分析。
二、慢查詢?nèi)罩鹃_啟? ?
1)查看是否開啟,默認(rèn)是關(guān)閉的
show VARIABLES like '%slow_query_log%'
可以看到默認(rèn)慢日志的保存文件以及狀態(tài)?
2)開啟:
#只會(huì)開啟當(dāng)前MySQL的慢日志查詢,如果需要永久的話需要修改my.cnf/my.ini文件
set GLOBAL slow_query_log=1
3)查看默認(rèn)慢查詢sql默認(rèn)時(shí)間,大于10秒,沒有等于
show VARIABLES like 'long_query_time%'
4)設(shè)置sql查詢超時(shí)時(shí)間
set GLOBAL long_query_time=3
但是修改為不會(huì)立即生效,兩種辦法:
- 關(guān)閉數(shù)據(jù)庫回話重新連接
- 使用 show global VARIABLES like 'long_query_time%' 查看
三、模擬慢sql并分析
由于本次數(shù)據(jù)庫安裝通過docker安裝,所以需要進(jìn)入到mysql容器內(nèi)部去查看慢日志,上面看到慢日志地址/var/lib/mysql/dca928abb464-slow.log,也是mysql容器里面的。
1)docker進(jìn)入MySQL容器
docker exec -it e1066fe2db35(mysql容器) /bin/bash
2)此時(shí)進(jìn)入mysql環(huán)境,當(dāng)未登錄進(jìn)入,可以查看slow_query_log_file文件信息
cat /var/lib/mysql/dca928abb464-slow.log
3)Navicat客戶端模擬,查詢超時(shí),睡眠4秒,由于我們上面設(shè)置了查詢超過3s保存慢日志
select sleep(4);
?4)再一次查看cat /var/lib/mysql/dca928abb464-slow.log 文件,可以看到那個(gè)sql語句變慢了,以及耗時(shí)多久
?只要是超過long_query_time的sql都會(huì)被記錄
5)查看當(dāng)前數(shù)據(jù)有多少條慢sql?
show GLOBAL??STATUS like '%slow_queries%'
?6)慢日志分析工具:mysqldumpslow,這個(gè)大家有興趣的可以去詳細(xì)了解如何使用。
指定日志文件,查看記錄集中最多的sql
mysqldumpslow -s r -t 10 /var/lib/mysql/dca928abb464-slow.log
文章來源:http://www.zghlxwxcb.cn/news/detail-654015.html
三、總結(jié)
本文通過實(shí)戰(zhàn)demo,一步一步配置分析如何利用慢日志去定位查詢耗時(shí)的sql語句,在實(shí)際工作中,一般將生產(chǎn)的數(shù)據(jù)拷貝到測試環(huán)境,在測試環(huán)境開啟慢日志,模擬生產(chǎn)接口調(diào)用,進(jìn)而去查看慢日志文件,定位是那個(gè)sql耗時(shí)的。文章來源地址http://www.zghlxwxcb.cn/news/detail-654015.html
到了這里,關(guān)于性能分析之MySQL慢查詢?nèi)罩痉治觯樵內(nèi)罩荆┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!