国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何排查MySQL執行死鎖原因

數據庫 MySQL
為什么sql為null卻依然占有鎖?在查詢相關資料和咨詢jameszhou后,知道了這個實際和innodb 引擎的寫機制有關,innodb執行寫事務操作時,實際是先取得索引中該行的行鎖(即使該表上沒有任何索引,那么innodb會在后臺創建一個隱藏的聚集主鍵索引),再在緩存里寫入,最后事務commit后正式寫入DB中并釋放鎖。

今天碰到一次因死鎖導致更新操作的sql事務執行時間過長,特將排查過程記錄如下:

首先該sql事務的where條件已經命中了主鍵索引,而且表也不大,故可以排除掃表過慢原因。通過 show processlist;發現也只有該sql事務在操作這個表,初看起來似乎也不像是死鎖的原因:

但通過咨詢yellbehuang后發現,判斷sql事務是否死鎖不能簡單通過show processlist來判斷,而是要通過查詢innodb鎖的相關表來確定,和innodb鎖有關的主要有三個表,

  1. innodb_trx         ## 當前運行的所有事務 
  2. innodb_locks       ## 當前出現的鎖 
  3. innodb_lock_waits  ## 鎖等待的對應關系 

上面表的各個字段的含義如下:

  1. innodb_locks: 
  2. +————-+———————+——+—–+———+——-+ 
  3. | Field       | Type                | Null | Key | Default | Extra | 
  4. +————-+———————+——+—–+———+——-+ 
  5. | lock_id     | varchar(81)         | NO   |     |         |       |#鎖ID 
  6. | lock_trx_id | varchar(18)         | NO   |     |         |       |#擁有鎖的事務ID 
  7. | lock_mode   | varchar(32)         | NO   |     |         |       |#鎖模式 
  8. | lock_type   | varchar(32)         | NO   |     |         |       |#鎖類型 
  9. | lock_table  | varchar(1024)       | NO   |     |         |       |#被鎖的表 
  10. | lock_index  | varchar(1024)       | YES  |     | NULL    |       |#被鎖的索引 
  11. | lock_space  | bigint(21) unsigned | YES  |     | NULL    |       |#被鎖的表空間號 
  12. | lock_page   | bigint(21) unsigned | YES  |     | NULL    |       |#被鎖的頁號 
  13. | lock_rec    | bigint(21) unsigned | YES  |     | NULL    |       |#被鎖的記錄號 
  14. | lock_data   | varchar(8192)       | YES  |     | NULL    |       |#被鎖的數據 
  15. innodb_lock_waits: 
  16. +-------------------+-------------+------+-----+---------+-------+ 
  17. | Field | Type | Null | Key | Default | Extra | 
  18. +-------------------+-------------+------+-----+---------+-------+ 
  19. | requesting_trx_id | varchar(18) | NO | | | |#請求鎖的事務ID 
  20. | requested_lock_id | varchar(81) | NO | | | |#請求鎖的鎖ID 
  21. | blocking_trx_id | varchar(18) | NO | | | |#當前擁有鎖的事務ID 
  22. | blocking_lock_id | varchar(81) | NO | | | |#當前擁有鎖的鎖ID 
  23. +-------------------+-------------+------+-----+---------+-------+ 
  24. innodb_trx : 
  25. +—————————-+———————+——+—–+———————+——-+ 
  26. | Field | Type | Null | Key | Extra | 
  27. +—————————-+———————+——+—–+———————+——-+ 
  28. | trx_id | varchar(18) | NO | | |#事務ID 
  29. | trx_state | varchar(13) | NO | | |#事務狀態: 
  30. | trx_started | datetime | NO | | |#事務開始時間; 
  31. | trx_requested_lock_id | varchar(81) | YES | | |#innodb_locks.lock_id 
  32. | trx_wait_started | datetime | YES | | |#事務開始等待的時間 
  33. | trx_weight | bigint(21) unsigned | NO | | |# 
  34. | trx_mysql_thread_id | bigint(21) unsigned | NO | | |#事務線程ID 
  35. | trx_query | varchar(1024) | YES | | |#具體SQL語句 
  36. | trx_operation_state | varchar(64) | YES | | |#事務當前操作狀態 
  37. | trx_tables_in_use | bigint(21) unsigned | NO | | |#事務中有多少個表被使用 
  38. | trx_tables_locked | bigint(21) unsigned | NO | | |#事務擁有多少個鎖 
  39. | trx_lock_structs | bigint(21) unsigned | NO | | |# 
  40. | trx_lock_memory_bytes | bigint(21) unsigned | NO | | |#事務鎖住的內存大小(B) 
  41. | trx_rows_locked | bigint(21) unsigned | NO | | |#事務鎖住的行數 
  42. | trx_rows_modified | bigint(21) unsigned | NO | | |#事務更改的行數 
  43. | trx_concurrency_tickets | bigint(21) unsigned | NO | | |#事務并發票數 
  44. | trx_isolation_level | varchar(16) | NO | | |#事務隔離級別 
  45. | trx_unique_checks | int(1) | NO | | |#是否唯一性檢查 
  46. | trx_foreign_key_checks | int(1) | NO | | |#是否外鍵檢查 
  47. | trx_last_foreign_key_error | varchar(256) | YES | | |#最后的外鍵錯誤 
  48. | trx_adaptive_hash_latched | int(1) | NO | | |# 
  49. | trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | |# 

可以通過select * from INNODB_LOCKS a inner join INNODB_TRX b on a.lock_trx_id=b.trx_id and trx_mysql_thread_id=線程id 來獲取該sql的鎖狀態,線程id可以通過上面的show processlist來獲得,執行結果如下:

此時發現,該sql連接確實處于LOCK WAIT鎖等待狀態

通過select * from innodb_lock_waits where requesting_trx_id=75CB26E5(即上面查詢得到的lock_trx_id)可以得到當前擁有鎖的事務ID 75CB26AE。

再通過select * from innodb_trx where lock_trx_id=75CB26AE獲取sql語句與線程id

從上面的結果中看出,該事務處于running狀態,但sql卻為null,該線程id即對于上面show processlist的206機器的30764端口的連接,該連接處于sleep狀態。為什么sql為null卻依然占有鎖?在查詢相關資料和咨詢jameszhou后,知道了這個實際和innodb 引擎的寫機制有關,innodb執行寫事務操作時,實際是先取得索引中該行的行鎖(即使該表上沒有任何索引,那么innodb會在后臺創建一個隱藏的聚集主鍵索引),再在緩存里寫入,最后事務commit后正式寫入DB中并釋放鎖。之所以sql為null,是因為該連接已經把sql update操作執行寫入緩存中了,但是由于代碼bug沒有最后commit,導致一直占用著行鎖,后續新的連接想寫這一行數據卻因為一直取不到行鎖而處于長時間的等待狀態。

那為什么innodb需要兩次寫?下面是我查詢相關資料得出來的結論:

因為innodb中的日志是邏輯的,所謂邏輯就是比如當插入一條記錄時,它可能會導致在某一個頁面(這條記錄最終被插入的位置)的多個偏移位置寫入某個長度的值,比如頁頭的記錄數,槽數,頁尾槽數據,頁中的記錄值等等,這些本是一些物理操作,而innodb為了節約日志量及其它一些原因,設計為邏輯處理的方式,那就是它會在一個頁面的基礎上,把一條記錄插入,那么在日志記錄中記錄的內容為表空間號、頁面號、記錄的各個列的值等等,在內部轉換為上面的物理操作。

但這里的一個問題是,如果那個頁面本身是錯誤的,這種錯誤有可能是因為寫斷裂(1個頁面為16K,分多次寫入,后面的有可能沒有寫成功,導致這個頁面不完整)引起的,那么這個邏輯操作就沒辦法完成了,因為它的前提是這個頁面還是正確的,完整的,因為如果這個頁面不正確的話,這個頁面里的數據是無效的,有可能產生各種不可預料的問題。

那么正是因為這個問題,所以必須要首先保證這個頁面是正確的,方法就是兩次寫,它的思想最終是一種備份思想,也就是一種鏡像。

innodb兩次寫的過程:

可以將兩次寫看作是在Innodb表空間內部分配的一個短期的日志文件,這一日志文件包含100個數據頁。Innodb在寫出緩沖區中的數據頁時采用的是一次寫多個頁的方式,這樣多個頁就可以先順序寫入到兩次寫緩沖區并調用fsync()保證這些數據被寫出到磁盤,然后數據頁才被定出到它們實際的存儲位置并再次調用fsync()。故障恢復時Innodb檢查doublewrite緩沖區與數據頁原存儲位置的內容,若數據頁在兩次寫緩沖區中處于不一致狀態將被簡單的丟棄,若在原存儲位置中不一致則從兩次寫緩沖區中還原。

原文鏈接:https://www.qcloud.com/community/article/886137

作者:陳文嘯

【本文是51CTO專欄作者“騰訊云技術社區”的原創稿件,轉載請通過51CTO聯系原作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2023-02-16 08:10:40

死鎖線程

2021-03-03 08:57:46

java死鎖線程

2024-11-29 16:35:33

解決死鎖Java線程

2019-03-15 16:20:45

MySQL死鎖排查命令

2017-12-19 14:00:16

數據庫MySQL死鎖排查

2023-07-26 07:18:54

死鎖線程池

2022-01-26 19:42:05

MySQL亂碼排查

2025-05-13 08:15:00

PoE供電網絡

2018-05-29 11:44:22

數據庫MySQL死鎖

2021-08-24 08:01:15

死鎖工具多線編程

2010-11-09 16:29:39

SQL Server死

2022-05-16 07:35:47

死鎖工具jstack

2011-08-09 13:34:56

MySQL數據庫負荷較高

2024-12-27 00:00:00

SQL死鎖數據庫

2017-06-07 16:10:24

Mysql死鎖死鎖日志

2016-10-20 15:27:18

MySQLredo死鎖

2010-07-02 10:53:32

SQL Server死

2022-05-11 07:41:55

死鎖運算線程

2023-09-13 14:52:11

MySQL數據庫

2021-10-20 20:27:55

MySQL死鎖并發
點贊
收藏

51CTO技術棧公眾號

成人免费小视频| 国语对白做受xxxxx在线中国| 精品一区二区三区在线播放视频| www.欧美日本| 欧美精品一二三| silk一区二区三区精品视频| 久久久久久九九| 综合久久久久久久| 悠悠资源网亚洲青| 成人黄色av免费在线观看| 福利一区二区在线观看| av黄色在线观看| 青青草一区二区| 岛国精品在线播放| 欧美性videos| 国产精品视频免费观看www| 国产精品系列在线观看| 你懂的在线视频| 国内精品小视频| 国产精品资源网站| 幼a在线观看| 国产精品ⅴa在线观看h| 成人黄色av网站在线| caopo在线| 91丝袜脚交足在线播放| 中文字幕在线观看不卡| 外国成人直播| 日韩成人av电影在线| 欧美日韩国产在线| 97视频一区| 少妇人妻大乳在线视频| 91麻豆精品国产91久久久资源速度| 国产探花在线精品| 日韩一级片播放| 国产午夜精品一区二区三区| 久久久久久黄| 可以直接在线观看的av| 97久久久久久| 99久久免费国产| 高清不卡亚洲| 亚洲欧洲日夜超级视频| 欧美性猛交xxx| 精品久久电影| 国产一级黄色电影| 97在线视频一区| 国产精品青草综合久久久久99| 爱情电影网av一区二区| 国产在线无码精品| 日韩一卡二卡三卡国产欧美| 国产精品av久久久久久麻豆网| 天堂аⅴ在线最新版在线 | 欧美国产日韩中文字幕在线| 亚洲第一精品夜夜躁人人躁| 日本麻豆一区二区三区视频| 中文字幕在线免费播放| 亚州av乱码久久精品蜜桃| 日本不卡一区在线| 国语自产精品视频在线看一大j8| 95精品视频在线| 日韩一区网站| 久久久噜噜噜www成人网| 在线国产精品视频| 国产91精品一区二区麻豆网站| 91精品产国品一二三产区| 熟女熟妇伦久久影院毛片一区二区| 日韩欧美第一区| 美国三级日本三级久久99| cao在线视频| 国产精品一色哟哟| 久久精品一区中文字幕| 99精品国产热久久91蜜凸| 四虎国产精品免费久久| 国产性xxxx18免费观看视频| 久久久久久亚洲精品中文字幕| 26uuu欧美| 偷拍亚洲色图| 日韩av视屏| 精品国产综合| 亚洲第一精品福利| 成人免费黄色大片| 亚洲乱码一区| 国产精品精华液网站| 动漫3d精品一区二区三区 | 69久久夜色精品国产69乱青草| 亚洲日本乱码在线观看| 91九色精品| 制服丝袜在线播放| 麻豆映画在线观看| 欧美黑人视频一区| 欧美日韩视频在线| 男人的天堂亚洲| 亚洲四虎影院| av一级在线| 国产精品视频免费观看| 精品无人国产偷自产在线| 成人免费高清在线观看| 亚洲瘦老头同性70tv| 国产精品一级伦理| 欧美性受黑人性爽| 欧美激情亚洲视频| 欧美在线免费视屏| 高清免费成人av| 欧美伦理影院| av2020不卡| 一道本在线免费视频| 96成人在线视频| 在线视频欧美日韩精品| 亚洲美女免费视频| 三级欧美韩日大片在线看| 亚洲综合色婷婷在线观看| 日韩黄色影片| 400部精品国偷自产在线观看| 欧美在线欧美在线| 欧美一区二区在线免费播放| 久久久噜噜噜久久中文字幕色伊伊| 一本一道久久综合狠狠老| 欧美日韩国产网站| 男男激情在线| 国产av无码专区亚洲精品| 国产精品一 二 三| 欧美国产极速在线| 日韩欧美国产1| 亚洲精品中文字幕在线观看| 日韩有码一区二区三区| 妖精视频一区二区三区| 182在线视频观看| 国产在线传媒| 男人添女人下部高潮视频在观看| 97人人模人人爽视频一区二区| 精品国产一区二区三区久久久 | 色94色欧美sute亚洲线路一久 | 在线中文字幕-区二区三区四区| 北条麻妃在线视频| 久久精品第九区免费观看| 久久久亚洲影院| 精品成人佐山爱一区二区| 一区二区三区四区乱视频| 国产精品一区三区| 亚洲国产国产亚洲一二三| 精品欧美午夜寂寞影院| 日韩激情电影免费看| 男人的天堂av高清在线| 国产原创精品在线| 国产内射老熟女aaaa| 好看的日韩精品| 国产精品wwww| 精品中文字幕在线2019| 精品国产sm最大网站| 日本高清视频一区二区| 中文字幕成人av| 国产尤物一区二区| 夜夜嗨网站十八久久| 国产精品91一区二区三区| 成人直播在线观看| 国产精品黄色片| 日韩成人伦理| 国产h在线观看| 日本性视频网| 激情视频免费网站| koreanbj精品视频一区| 亚洲图片都市激情| 精品欧美一区二区三区久久久| 国产精品吴梦梦| 欧洲成人午夜免费大片| 欧美激情中文字幕乱码免费| 国产香蕉97碰碰久久人人| 亚洲成人亚洲激情| 日韩欧美一区二区免费| 欧美日韩在线观看一区二区| 亚洲国产综合色| 亚洲精品综合在线| 亚洲男帅同性gay1069| 国产日韩av一区| 2020国产精品自拍| 99久久综合99久久综合网站| 国产剧情在线观看一区二区| 人人狠狠综合久久亚洲| 久久久久国产精品一区二区| 在线欧美亚洲| 国产主播一区| 91精品一区国产高清在线gif| 欧美综合一区| 日韩.com| 亚洲乱码精品| 欧美午夜久久| 亚洲激情成人| 老司机午夜免费精品视频 | 成人图片小说| 色悠悠久久综合网| 一区二区在线播放视频| 东京热加勒比无码少妇| 国产91美女视频| 成人性做爰aaa片免费看不忠| 男人揉女人奶房视频60分| 每日在线更新av| 婷婷激情四射五月天| 成人亚洲成人影院| 8×8x拔擦拔擦在线视频网站| 在线中文av| 国产美女视频一区二区三区|