MySQL慢查詢問題排查方式
MySQL慢查詢排查
第一步:查看當(dāng)前正在運(yùn)行的事務(wù)狀態(tài)
select trx_state,trx_started,trx_mysql_thread_id,trx_query from information_schema.innodb_trx;
其中:
Trx_state
:事務(wù)狀態(tài)Trx_started
:事務(wù)啟動(dòng)時(shí)間Trx_mysql_thread_id
:事務(wù)的線程idTrx_query
:事務(wù)當(dāng)前執(zhí)行的查詢sql
當(dāng)Trx_state
的值為:“LOCK_WAIT”時(shí),說明發(fā)生了鎖等待。等待時(shí)間過長可能導(dǎo)致程序返回失敗。
示例:
第二步:查看線程狀態(tài)
show processlist;
- 返回結(jié)果包括:id,host,db,Command,Time,State等。
- 找到id等于第一步中的trx_mysql_thread_id對(duì)應(yīng)的記錄,如果Command是“Sleep”。
- 說明這個(gè)線程的事務(wù)一直沒有提交或者卡住了。我們需要手動(dòng)kill掉。
第三步:殺死線程
Kill id
- 在mysql客戶端執(zhí)行上面的命令殺死線程。
- 一般使用以上的命令足以判斷是否是因?yàn)槭聞?wù)等待問題發(fā)生錯(cuò)誤。
第四步:輔助判斷命令
此外,以下命令也可以輔助判斷:
1. 查詢行鎖狀態(tài):
show status like 'InnoDB_row_lock%';
返回中,Innodb_row_lock_current_waits顯示正在等待行鎖的數(shù)量。
2. 查詢當(dāng)前使用的鎖
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
Mysql8中對(duì)應(yīng)為:
select * from performance_schema.data_locks;
3. 查詢鎖等待的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
Mysql8中對(duì)應(yīng)為:
select * from performance_schema.data_lock_waits;
4. 查詢當(dāng)前被鎖的表
show OPEN TABLES where In_use > 0;
5. 查詢最近一次的死鎖記錄日志
show engine innodb status
可以導(dǎo)出到本地查看:
mysql -u root -p --execute="show engine innodb status \G" > /root/test.log
根據(jù)以上命令,找到結(jié)果中存在等待異常的trx_id即事務(wù)id,再回到第一步,從當(dāng)前事務(wù)列表中找到對(duì)應(yīng)事務(wù),然后殺死對(duì)應(yīng)線程。
第五步:開啟慢查詢?nèi)罩?/h3>
通過慢查詢?nèi)罩?,記錄?zhí)行時(shí)間超時(shí)的sql語句。超時(shí)默認(rèn)是10秒。
1. 查看慢查詢?nèi)罩臼欠耖_啟,并開啟日志
show variables like '%query%';
返回中,slow_query_log為“OFF”,表示關(guān)閉。開啟日志:
set global slow_query_log='ON';
第六步:開啟通用查詢?nèi)罩?/h3>
1. 查看通用查詢?nèi)罩臼欠耖_啟
show variables like '%general%';
返回中,general_log為“OFF”,表示關(guān)閉。開啟日志:
set global general_log='ON'
注意:
通用日志會(huì)記錄所有的sql執(zhí)行語句,會(huì)導(dǎo)致日志文件過大,以及執(zhí)行速度變慢,應(yīng)在查詢后及時(shí)關(guān)閉。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL三種安裝方法(yum安裝、編譯安裝、二進(jìn)制安裝)
本文主要介紹了MySQL三種安裝方法,包含yum安裝、編譯安裝、二進(jìn)制安裝這三種,文中通過示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08關(guān)于Mysql搭建主從復(fù)制功能的步驟實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于Mysql搭建主從復(fù)制功能的步驟實(shí)現(xiàn),在實(shí)際的生產(chǎn)中,為了解決Mysql的單點(diǎn)故障已經(jīng)提高M(jìn)ySQL的整體服務(wù)性能,一般都會(huì)采用主從復(fù)制,需要的朋友可以參考下2023-05-05解決MySql版本問題sql_mode=only_full_group_by
這篇文章主要介紹了解決MySql版本問題sql_mode=only_full_group_by,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11my.ini優(yōu)化mysql數(shù)據(jù)庫性能的十個(gè)參數(shù)(推薦)
這篇文章主要介紹了my.ini優(yōu)化mysql數(shù)據(jù)庫性能的十個(gè)參數(shù)(推薦),需要的朋友可以參考下2015-09-09