亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL DeadLock故障排查全過程記錄

2024-07-25 19:09:28
字體:
來源:轉載
供稿:網友

【作者】

劉博:攜程技術保障中心數據庫高級經理,主要關注Sql server和Mysql的運維和故障處理。

【環境】

版本號:5.6.21

隔離級別:REPEATABLE READ

【問題描述】

接到監控報警,有一個線上的應用DeadLock報錯,每15分鐘會準時出現,報錯統計如下圖:

MySQL,DeadLock,故障排查

登錄Mysql服務器查看日志:

mysql> show engine innodb status/G*** (1) TRANSACTION:TRANSACTION 102973, ACTIVE 11 sec starting index readmysql tables in use 3, locked 3LOCK WAIT 4 lock struct(s), heap size 1136, 3 row lock(s)MySQL thread id 6, OS thread handle 140024996574976, query id 83 localhost us updatingUPDATE TestTableSET column1 = 1,Column2 = sysdate(),Column3= '026'Column4 = 0AND column5 = 485AND column6 = 'SEK'*** (1) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 417 page no 1493 n bits 1000 index idx_column6 of table test.TestTable trx id 102973 lock_mode X waitingRecord lock, heap no 859 PHYSICAL RECORD: n_fields 2; compact format; info bits 00: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007e1452; asc ~ R;;*** (2) TRANSACTION:TRANSACTION 102972, ACTIVE 26 sec starting index readmysql tables in use 3, locked 3219 lock struct(s), heap size 24784, 2906 row lock(s), undo log entries 7MySQL thread id 5, OS thread handle 140024996841216, query id 84 localhost us updatingUPDATE TestTableSET Column1 = 1,Column2 = sysdate(),Column3 = '026'Column4 = 0AND Column5 = 485AND Column6 = 'SEK'*** (2) HOLDS THE LOCK(S):RECORD LOCKS space id 417 page no 1493 n bits 1000 index idx_Column6 of table test.TestTable trx id 102972 lock_mode XRecord lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 00: len 8; hex 73757072656d756d; asc supremum;;Record lock, heap no 859 PHYSICAL RECORD: n_fields 2; compact format; info bits 00: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007e1452; asc ~ R;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 601 page no 89642 n bits 1000 index idx_column6 of table test.TestTable trx id 32231892482 lock_mode X locks rec but not gap waitingRecord lock, heap no 38 PHYSICAL RECORD: n_fields 2; compact format; info bits 00: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007eea14; asc ~ ;;

大致一看,更新同一索引的同一行,應該是一個Block,報TimeOut的錯才對,怎么會報DeadLock?

【初步分析】

先分析下(2) TRANSACTION,TRANSACTION 32231892482。

等待的鎖信息為:

0: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007eea14; asc

持有的鎖信息為:

0: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007eeac4; asc

再先分析下(1) TRANSACTION,TRANSACTION 32231892617。

等待的鎖信息為:

0: len 3; hex 53454b; asc SEK;;1: len 8; hex 80000000007eeac4; asc

于是可以畫出的死鎖表,兩個資源相互依賴,造成死鎖:

 

TRANSACTION Hold Wait
32231892617 53454b/80000000007eea14 53454b/80000000007eeac4
32231892482 53454b/80000000007eeac4 53454b/80000000007eea14

 

讓我們再看一下explain結果:

mysql>desc UPDATE TestTable SET Column1=1, Column2 = sysdate(),Column3 = '025' Column4 = 0 AND Column5 = 477 AND Column6 = 'SEK' /G;

*************************** 1. row ***************************

id: 1

select_type: UPDATE

table: TestTable

partitions: NULL

type: index_merge

possible_keys: column5_index,idx_column5_column6_Column1,idxColumn6

key: column5_index,idxColumn6

key_len: 8,9

ref: NULL

rows: 7

filtered: 100.00

Extra: Using intersect(column5_index,idxColumn6); Using where

可以看到 EXTRA 列:

Using intersect(column5_index,idxColumn6)

從5.1開始,引入了 index merge 優化技術,對同一個表可以使用多個索引分別進行條件掃描。

相關文檔:http://dev.mysql.com/doc/refman/5.7/en/index-merge-optimization.html

The Index Merge method is used to retrieve rows with several range scans and to merge their results into one. The merge can produce unions, intersections, or unions-of-intersections of its underlying scans. This access method merges index scans from a single table; it does not merge scans across multiple tables.

【模擬與驗證】

根據以上初步分析,猜測應該就是intersect造成的,于是在測試環境模擬驗證,開啟2個session模擬死鎖:

 

時間序列 Session1 Session2
1 Begin;  
2 UPDATE TestTable SET Column2 = sysdate() Column4 = 0 AND Column5 = 47 AND Column6 = 'SEK 
執行成功,影響7行
 
3   Begin;
4   UPDATE TestTable SET Column2 = sysdate(),Column4 = 0 AND Column5 = 485 AND Column6 = 'SEK';
被Blocking
5 UPDATE TestTable SET Column2 = sysdate(),Column4 = 0 AND Column5 = 485 AND Column6 = 'SEK';
執行成功
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

 

依據以上信息可以發現Session2雖然被Block了,但也獲取了一些Session1在時間序列5時所需資源的X鎖,可以再開啟一個查詢select count(Column5) from TestTable where Column5 = 485,設置SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,去查詢Column5 = 485的行,觀察鎖等待的信息:
mysql> SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id

mysql> SELECT r.trx_id waiting_trx_id, r.trx_mysql_thread_id waiting_thread, r.trx_query waiting_query, b.trx_id blocking_trx_id, b.trx_mysql_thread_id blocking_thread, b.trx_query blocking_query FROM information_schema.innodb_lock_waits w INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id /G;*************************** 1. row ***************************waiting_trx_id: 103006waiting_thread: 36waiting_query: UPDATE TestTable SET Column1 = 1, Column2 = sysdate(), Column3 = '026' Column4 = 0 AND Column5 = 485 AND Column6 = 'SEK'blocking_trx_id: 103003blocking_thread: 37blocking_query: NULL*************************** 2. row ***************************waiting_trx_id: 421500433538672waiting_thread: 39waiting_query: select count(Column5) from TestTable where Column5 = 485blocking_trx_id: 103006blocking_thread: 36blocking_query: UPDATE TestTable SET Column1 = 1, Column2 = sysdate(), Column3 = '026' Column4 = 0 AND Column5 = 485 AND Column6 = 'SEK'2 rows in set, 1 warning (0.00 sec)mysql> select * from information_schema.innodb_lock_waits /G;*************************** 1. row ***************************requesting_trx_id: 103006requested_lock_id: 103006:417:1493:859blocking_trx_id: 103003blocking_lock_id: 103003:417:1493:859*************************** 2. row ***************************requesting_trx_id: 421500433538672requested_lock_id: 421500433538672:417:749:2blocking_trx_id: 103006blocking_lock_id: 103006:417:749:22 rows in set, 1 warning (0.00 sec)
mysql> select * from INNODB_LOCKS /G;*************************** 1. row ***************************lock_id: 103006:417:1493:859lock_trx_id: 103006lock_mode: Xlock_type: RECORDlock_table: test.TestTablelock_index: idxColumn6lock_space: 417lock_page: 1493lock_rec: 859lock_data: 'SEK', 8262738*************************** 2. row ***************************lock_id: 103003:417:1493:859lock_trx_id: 103003lock_mode: Xlock_type: RECORDlock_table:test.TestTablelock_index: idxColumn6lock_space: 417lock_page: 1493lock_rec: 859lock_data: 'SEK', 8262738*************************** 3. row ***************************lock_id: 421500433538672:417:749:2lock_trx_id: 421500433538672lock_mode: Slock_type: RECORDlock_table: test.TestTablelock_index: column5_indexlock_space: 417lock_page: 749lock_rec: 2lock_data: 485, 8317620*************************** 4. row ***************************lock_id: 103006:417:749:2lock_trx_id: 103006lock_mode: Xlock_type: RECORDlock_table: test.TestTablelock_index: column5_indexlock_space: 417lock_page: 749lock_rec: 2lock_data: 485, 83176204 rows in set, 1 warning (0.00 sec)

可以看到Session2,trx_id 103006阻塞了trx_id 421500433538672,而trx_id 421500433538672 requested_lock也正好是lock_data: 485, 8317620。由此可見Session2雖然別block了,但是還是獲取到了Index column5_index相關的鎖。被Block是因為intersect的原因,還需要idxColumn6的鎖,至此思路已經清晰,對整個分配鎖的信息簡化一下,如下表格(請求到的鎖用青色表示,需獲取但未獲取到的鎖用紅色表示):

 

時間點 Session1 Session2
1 477 SEK  
2   485 SEK
3 485 SEK 死鎖發生

 

可以看到485 SEK這兩個資源形成了一個環狀,最終發生死鎖。

【解決方法】

  • 最佳的方法是添加column5和Column6的聯合索引。
  • 我們環境當時的情況發現Column6的篩選度非常低,就刪除了Column6的索引。
    10:55左右刪除索引后,報錯沒有再發生:

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丰满岳妇乱一区二区三区| 91久久精品美女高潮| 日本精品免费一区二区三区| 久久久www成人免费精品| 欧美激情手机在线视频| 中文精品99久久国产香蕉| 亚洲一区二区福利| 97超视频免费观看| 日本亚洲欧洲色α| 亚洲一区国产精品| 91在线视频导航| 成人a免费视频| 91久久国产综合久久91精品网站| 成人av在线天堂| 日韩精品高清在线| 在线观看国产精品淫| 久久精品国产视频| 国产精品精品久久久| 日韩中文字幕视频在线观看| 久久久久国产精品一区| 国产99久久精品一区二区永久免费| 精品久久久久久久久中文字幕| 亚洲精品久久久久中文字幕二区| 国产mv久久久| 超在线视频97| 成人国产精品一区| 国内精品久久久久久久久| 欧美最近摘花xxxx摘花| 国产日韩在线看| 91大神在线播放精品| 一本色道久久88精品综合| 欧美精品一二区| 91在线视频成人| 国产精品视频一区国模私拍| 国产精品主播视频| 欧美性色xo影院| 亚洲最大的网站| 国产亚洲欧美一区| 精品国产乱码久久久久久虫虫漫画| 色妞色视频一区二区三区四区| 久久97久久97精品免视看| 久色乳综合思思在线视频| 欧美www在线| 国产成人精品免费久久久久| 日韩精品中文字| 中文字幕亚洲一区二区三区五十路| 亚洲男人天堂网站| 欧美日韩国产丝袜美女| 国产精品69精品一区二区三区| 亚洲伊人一本大道中文字幕| 精品视频在线播放| 日韩在线视频观看| 伊人久久久久久久久久| 久久99精品国产99久久6尤物| 中文字幕欧美视频在线| 亚洲r级在线观看| 亚洲女人被黑人巨大进入al| 欧美亚洲免费电影| 欧美国产日韩一区二区| 亚洲国产天堂久久综合| 国产一区二区三区直播精品电影| 人人做人人澡人人爽欧美| 中文字幕av日韩| 亚洲国产毛片完整版| 亚洲人精选亚洲人成在线| 美女999久久久精品视频| 欧美大片在线影院| 岛国av在线不卡| 91精品国产91久久久| 性亚洲最疯狂xxxx高清| 久久久久久国产精品久久| 欧美在线观看日本一区| 国产69精品久久久久9999| 97**国产露脸精品国产| 亚洲一区二区三区xxx视频| 亚洲精品98久久久久久中文字幕| 国产精品爱啪在线线免费观看| 精品一区二区三区四区在线| 欧美精品videosex牲欧美| 国产性猛交xxxx免费看久久| 成人黄色短视频在线观看| 亚洲欧美国产精品va在线观看| 久久精品视频在线| 亚洲成人在线网| 国内免费精品永久在线视频| 亚洲国产精品99久久| 98视频在线噜噜噜国产| www.亚洲一区| 国产aⅴ夜夜欢一区二区三区| 欧美一区视频在线| 欧美电影免费看| 国产91在线视频| 国产精品久久久久999| 日韩欧美极品在线观看| 欧美俄罗斯乱妇| 日韩风俗一区 二区| 91精品久久久久久久久久久久久| 91av网站在线播放| 91免费的视频在线播放| 午夜剧场成人观在线视频免费观看| 性色av一区二区咪爱| 97在线视频一区| 亚洲第一中文字幕| 色99之美女主播在线视频| 欧美激情欧美激情| 亚洲精选中文字幕| 97热精品视频官网| 操日韩av在线电影| 亚洲日韩欧美视频一区| 中文字幕日韩精品在线观看| 国产精品99久久久久久人| 久久躁狠狠躁夜夜爽| 青青久久av北条麻妃海外网| 亚洲免费视频网站| 国模精品一区二区三区色天香| 中文字幕成人精品久久不卡| 97婷婷涩涩精品一区| 日产日韩在线亚洲欧美| 久久久久久亚洲精品| 国产福利精品视频| 欧美成人午夜剧场免费观看| 国产精品久久久久久婷婷天堂| 欧美大片欧美激情性色a∨久久| 亚洲成av人片在线观看香蕉| 久久网福利资源网站| 国产91在线播放| 久久久久久久久亚洲| 欧美激情videos| 欧美亚洲一区在线| 日韩久久精品成人| 91美女高潮出水| 国产午夜精品免费一区二区三区| 久久精品视频一| 精品久久久中文| 91免费看片网站| 国产精品视频精品视频| 午夜免费在线观看精品视频| 国产在线拍揄自揄视频不卡99| 欧美多人乱p欧美4p久久| 日韩中文字幕视频在线观看| 久久精品成人欧美大片古装| 91精品在线看| 国产亚洲xxx| 亚洲国产成人精品久久久国产成人一区| 精品久久久久久亚洲精品| 日韩欧美中文免费| 久久久久久久久电影| 国产精品久久久久久久av电影| 91精品久久久久久综合乱菊| 中文字幕免费精品一区高清| 色偷偷9999www| 色妞欧美日韩在线| 免费av一区二区| 欧美日韩中文字幕在线| 欧美综合第一页| 中文字幕久热精品在线视频| 91精品国产色综合久久不卡98口| 欧美一区深夜视频| 欧美日本亚洲视频| 97在线免费视频| 欧美人与性动交a欧美精品| 不卡av日日日| 26uuu亚洲国产精品| 国产精品欧美一区二区三区奶水|