MySQL自帶慢日志排查慢查詢SQL
根據(jù)MySQL自帶慢日志功能定位慢SQL
1、查詢有關(guān)query的相關(guān)變量:
show global variables like '%quer%';
參數(shù)解釋:
- log_queries_not_using_indexes:是否記錄不使用索引查詢的SQL,默認OFF 可通過命令:set global log_queries_not_using_indexes=on; 開啟
- long_query_time:慢查詢的閾值
- slow_query_log:開啟慢查詢SQL記錄,默認OFF
- slow_query_log_file:慢查詢SQL記錄日志位置
2、開啟慢查詢?nèi)罩?/h2>
set global slow_query_log=on;
set global slow_query_log=on;
3. 設(shè)置慢查詢閾值
set global long_query_time=1;
閾值的默認值是10s,自行設(shè)置,只要SQL的實際執(zhí)行時間超過了這個閾值,就會被記錄到慢查詢的日志里面,線上業(yè)務(wù)一般建議把long_query_time設(shè)置為1s,如果某個業(yè)務(wù)的MySQL要求比較高的QPS,可設(shè)置慢查詢?yōu)?.1s。
一般測試環(huán)境建議long_query_time設(shè)置的閥值比生產(chǎn)環(huán)境的小,比如生產(chǎn)環(huán)境是1s,則測試環(huán)境建議配置成0.5s。便于在測試環(huán)境及時發(fā)現(xiàn)一些效率的SQL。
4.查看慢查詢?nèi)罩?/h2>
1)確定文件位置:
show global variables like 'slow_query_log_file';
2)查看日志:
可以看到Query_time: 2.752885s,超過了1s,所以會被記錄
其他的參數(shù)解釋如下:
Time:慢查詢發(fā)生的時間
Query_time:查詢時間
Lock_time:等待鎖表的時間
Rows_sent:語句返回的行數(shù)
Rows_exanined:語句執(zhí)行期間從存儲引擎讀取的行數(shù)(重點關(guān)注提前優(yōu)化)
其他方式定位慢SQL
如果覺得系統(tǒng)自帶的慢查詢?nèi)罩静环奖悴榭?,可以使?strong>pt-query-digest或者mysqldumpslow等工具對慢查詢?nèi)罩具M行分析。
PS:有的慢查詢正在執(zhí)行,結(jié)果已經(jīng)導(dǎo)致數(shù)據(jù)庫負載過高,而由于慢查詢還沒執(zhí)行完,因此慢查詢?nèi)罩究床坏饺魏握Z句,此時可以使用show processlist命令查看正在執(zhí)行的慢查詢。show processlist顯示哪些線程正在運行,如果有PROCESS權(quán)限,則可以看到所有線程。否則,只能看到當(dāng)前會話線程。
總結(jié)
到此這篇關(guān)于MySQL自帶慢日志排查慢查詢SQL的文章就介紹到這了,更多相關(guān)MySQL排查慢查詢SQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos6.4下mysql5.7.18安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了centos6.4下mysql5.7.18安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07MySQL中datetime和timestamp的區(qū)別及使用詳解
這篇文章主要介紹了MySQL中datetime和timestamp的區(qū)別及使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11mysql 發(fā)生系統(tǒng)錯誤1067的解決方法
今天要把WEB項目打包成EXE,可是在數(shù)據(jù)庫上卡住了。在啟動數(shù)據(jù)庫服務(wù)的時候發(fā)生系統(tǒng)錯誤 1067。2009-09-09