亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文教你學(xué)會(huì)定位線(xiàn)上MySQL鎖超時(shí)問(wèn)題

 更新時(shí)間:2022年08月16日 10:30:31   作者:一燈架構(gòu)  
這篇文章主要介紹了一文教你學(xué)會(huì)定位線(xiàn)上MySQL鎖超時(shí)問(wèn)題,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言:

昨晚我正在床上睡得著著的,突然來(lái)了一條短信。

什么?線(xiàn)上的訂單無(wú)法取消!

我趕緊登錄線(xiàn)上系統(tǒng),查看業(yè)務(wù)日志。

發(fā)現(xiàn)有MySQL鎖超時(shí)的錯(cuò)誤日志。

不用想,肯定有另一個(gè)事務(wù)正在修改這條訂單,持有這條訂單的鎖。

導(dǎo)致當(dāng)前事務(wù)獲取不到鎖,一直等待,直到超過(guò)鎖超時(shí)時(shí)間,然后報(bào)錯(cuò)。

既然問(wèn)題已經(jīng)清楚了,接下來(lái)就輪到怎么排查一下到底是哪個(gè)事務(wù)正在持有這條訂單的鎖。

好在MySQL提供了豐富的工具,幫助我們排查鎖競(jìng)爭(zhēng)問(wèn)題。

現(xiàn)場(chǎng)復(fù)現(xiàn)一個(gè)這個(gè)問(wèn)題:

創(chuàng)建一張用戶(hù)表,造點(diǎn)數(shù)據(jù):

CREATE TABLE `user` (
 ?`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
 ?`name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名',
 ?PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

事務(wù)1,更新id=1的用戶(hù)姓名,不提交事務(wù):

begin;
update user set name='一燈' where id=1;

事務(wù)2,刪除id=1的數(shù)據(jù),這時(shí)候會(huì)產(chǎn)生鎖等待:

begin;
delete from user where id=1;

接下來(lái),我們就通過(guò)MySQL提供的鎖競(jìng)爭(zhēng)統(tǒng)計(jì)表,排查一下鎖等待問(wèn)題:

先查一下鎖等待情況:

select * from information_schema.innodb_lock_waits;

可以看到有一個(gè)鎖等待的事務(wù)。

然后再查一下正在競(jìng)爭(zhēng)的鎖有哪些?

select * from information_schema.innodb_locks;

可以看到,MySQL統(tǒng)計(jì)的非常詳細(xì):

lock_trx_id 表示事務(wù)ID

lock_mode 表示排它鎖還是共享鎖

lock_type 表示鎖定的記錄,還是范圍

lock_table 鎖的表名

lock_index 鎖定的是主鍵索引

再查一下正在執(zhí)行的事務(wù)有哪些?

select * from information_schema.innodb_trx; 

可以清楚的看到正在執(zhí)行的事務(wù)有兩個(gè),一個(gè)狀態(tài)是鎖等待(LOCK WAIT),正在執(zhí)行的SQL也打印出來(lái)了:

delete from user where id=1;

正是事務(wù)2的刪除語(yǔ)句。

不用問(wèn),第二條,顯示正在運(yùn)行狀態(tài)(RUNNING)的事務(wù)就是正在持有鎖的事務(wù)1,MySQL線(xiàn)程id(trx_mysql_thread_id)是193。

我們用MySQL線(xiàn)程id查一下事務(wù)線(xiàn)程id:

select * from performance_schema.threads where processlist_id=193;

找到對(duì)應(yīng)的事務(wù)線(xiàn)程id是218,然后再找一下這個(gè)線(xiàn)程正在執(zhí)行的SQL語(yǔ)句:

select THREAD_ID,CURRENT_SCHEMA,SQL_TEXT 
from performance_schema.events_statements_current 
where thread_id=218;

可以清楚的看到這個(gè)線(xiàn)程正在執(zhí)行的SQL語(yǔ)句就是事務(wù)1的update語(yǔ)句。

持有鎖的SQL語(yǔ)句找到了,接下來(lái)再去找對(duì)應(yīng)的業(yè)務(wù)代碼也就輕而易舉了。

以上是基于MySQL5.7版本,在MySQL8.0版本中有些命令已經(jīng)刪除了,替換成了其他命令,下篇文章再講一下MySQL8.0怎么定位MySQL鎖超時(shí)問(wèn)題。

到此這篇關(guān)于一文教你學(xué)會(huì)定位線(xiàn)上MySQL鎖超時(shí)問(wèn)題的文章就介紹到這了,更多相關(guān)MySQL鎖超時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解

    這篇文章主要介紹了MySQL 8.0.20 Window10免安裝版配置及Navicat管理,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 完美解決phpstudy安裝后mysql無(wú)法啟動(dòng)(無(wú)需刪除原數(shù)據(jù)庫(kù),無(wú)需更改任何配置,無(wú)需更改端口)直接共存

    完美解決phpstudy安裝后mysql無(wú)法啟動(dòng)(無(wú)需刪除原數(shù)據(jù)庫(kù),無(wú)需更改任何配置,無(wú)需更改端口)直接共存

    這篇文章主要介紹了完美解決phpstudy安裝后mysql無(wú)法啟動(dòng)(無(wú)需刪除原數(shù)據(jù)庫(kù),無(wú)需更改任何配置,無(wú)需更改端口)直接共存 ,需要的朋友可以參考下
    2019-04-04
  • MySQL數(shù)據(jù)庫(kù)終端—常用操作指令代碼

    MySQL數(shù)據(jù)庫(kù)終端—常用操作指令代碼

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)終端—常用操作指令代碼,添加用戶(hù)、更改用戶(hù)名和host主機(jī)、更改密碼、刪除用戶(hù)等等,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-01-01
  • 徹底卸載mysql 個(gè)人親測(cè)!

    徹底卸載mysql 個(gè)人親測(cè)!

    這篇文章主要為大家詳細(xì)介紹了徹底卸載mysql的具體步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Mysql基礎(chǔ)教程之增刪改查語(yǔ)句

    Mysql基礎(chǔ)教程之增刪改查語(yǔ)句

    這篇文章主要給大家介紹了關(guān)于Mysql基礎(chǔ)教程之增刪改查語(yǔ)句的相關(guān)資料,以下是MySQL最基本的增刪改查語(yǔ)句,很多IT工作者都必須要會(huì)的命令,也是IT行業(yè)面試最??嫉闹R(shí)點(diǎn),需要的朋友可以參考下
    2023-10-10
  • centos6.5下mysql 5.7.19 安裝配置方法

    centos6.5下mysql 5.7.19 安裝配置方法

    這篇文章主要為大家詳細(xì)介紹了centos6.5下mysql 5.7.19 安裝配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 如何在mysql進(jìn)行查詢(xún)緩存及失敗的解決方法

    如何在mysql進(jìn)行查詢(xún)緩存及失敗的解決方法

    這篇文章主要介紹了如何在mysql進(jìn)行查詢(xún)緩存及失敗的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL常用分庫(kù)分表方案匯總

    MySQL常用分庫(kù)分表方案匯總

    本文主要介紹了MySQL常用分庫(kù)分表方案匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MySQL優(yōu)化案例系列-mysql分頁(yè)優(yōu)化

    MySQL優(yōu)化案例系列-mysql分頁(yè)優(yōu)化

    這篇文章主要介紹了MySQL優(yōu)化案例系列-mysql分頁(yè)優(yōu)化,需要的朋友可以參考下
    2016-08-08
  • MySQL主從復(fù)制之GTID模式詳細(xì)介紹?

    MySQL主從復(fù)制之GTID模式詳細(xì)介紹?

    這篇文章主要介紹了MySQL主從復(fù)制之GTID模式,GTID的復(fù)制方式,它由UUID和事務(wù)ID兩個(gè)部分組成,具有GTID事務(wù)是全局唯一性的,并且一個(gè)事務(wù)對(duì)應(yīng)一個(gè)GTID值、一個(gè)GTID值在同一個(gè)MySQL實(shí)例上只會(huì)執(zhí)行一次等特點(diǎn),想了解更多的小伙伴可以參考下面詳細(xì)內(nèi)容,希望對(duì)你有所幫助
    2022-02-02

最新評(píng)論