AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

故障解析丨一次死鎖問(wèn)題的解決

來(lái)源: 責(zé)編: 時(shí)間:2024-03-18 09:31:34 196觀看
導(dǎo)讀背景業(yè)務(wù)端遇到報(bào)錯(cuò)為"Deadlock found when trying to get lock; try restarting transaction"則表明有死鎖發(fā)生名稱配置數(shù)據(jù)庫(kù)版本GreatSQL 8.0.26隔離級(jí)別Read-Commitedinnodb status 日志greatsql> show engine in

背景

業(yè)務(wù)端遇到報(bào)錯(cuò)為"Deadlock found when trying to get lock; try restarting transaction"則表明有死鎖發(fā)生B4g28資訊網(wǎng)——每日最新資訊28at.com

名稱B4g28資訊網(wǎng)——每日最新資訊28at.com

配置B4g28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)庫(kù)版本B4g28資訊網(wǎng)——每日最新資訊28at.com

GreatSQL 8.0.26B4g28資訊網(wǎng)——每日最新資訊28at.com

隔離級(jí)別B4g28資訊網(wǎng)——每日最新資訊28at.com

Read-CommitedB4g28資訊網(wǎng)——每日最新資訊28at.com

innodb status 日志

greatsql> show engine innodb status/G*************************** 1. row ***************************  Type: InnoDB  Name: Status: =====================================2024-01-28 16:55:38 140737023727360 INNODB MONITOR OUTPUT=====================================Per second averages calculated from the last 14 seconds-----------------BACKGROUND THREAD-----------------srv_master_thread loops: 41 srv_active, 0 srv_shutdown, 17830 srv_idlesrv_master_thread log flush and writes: 0----------SEMAPHORES-----------------------RW-LATCH INFO-------------Total number of rw-locks 132361OS WAIT ARRAY INFO: reservation count 11180OS WAIT ARRAY INFO: signal count 11177RW-shared spins 0, rounds 0, OS waits 0RW-excl spins 0, rounds 0, OS waits 0RW-sx spins 0, rounds 0, OS waits 0Spin rounds per wait: 0.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx------------------------LATEST DETECTED DEADLOCK------------------------2024-01-28 16:53:40 140735053358848*** (1) TRANSACTION:TRANSACTION 37616, ACTIVE 8 sec insertingmysql tables in use 1, locked 1LOCK WAIT 2 lock struct(s), heap size 1192, 1 row lock(s), undo log entries 1MySQL thread id 16, OS thread handle 140737023432448, query id 652 127.0.0.1 root updateinsert into info values (50,11)*** (1) HOLDS THE LOCK(S):RECORD LOCKS space id 26 page no 5 n bits 80 index uk_name of table `apple`.`info` trx id 37616 lock mode S waitingRecord lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 4; hex 8000000b; asc     ;; 1: len 4; hex 80000028; asc    (;;*** (1) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 26 page no 5 n bits 80 index uk_name of table `apple`.`info` trx id 37616 lock mode S waitingRecord lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 4; hex 8000000b; asc     ;; 1: len 4; hex 80000028; asc    (;;*** (2) TRANSACTION:TRANSACTION 37615, ACTIVE 24 sec insertingmysql tables in use 1, locked 1LOCK WAIT 3 lock struct(s), heap size 1192, 2 row lock(s), undo log entries 2MySQL thread id 15, OS thread handle 140737024022272, query id 653 127.0.0.1 root updateinsert into info values (60,8)*** (2) HOLDS THE LOCK(S):RECORD LOCKS space id 26 page no 5 n bits 80 index uk_name of table `apple`.`info` trx id 37615 lock_mode X locks rec but not gapRecord lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 4; hex 8000000b; asc     ;; 1: len 4; hex 80000028; asc    (;;*** (2) WAITING FOR THIS LOCK TO BE GRANTED:RECORD LOCKS space id 26 page no 5 n bits 80 index uk_name of table `apple`.`info` trx id 37615 lock_mode X locks gap before rec insert intention waitingRecord lock, heap no 7 PHYSICAL RECORD: n_fields 2; compact format; info bits 0 0: len 4; hex 8000000b; asc     ;; 1: len 4; hex 80000028; asc    (;;*** WE ROLL BACK TRANSACTION (1)------------TRANSACTIONS------------

查看表結(jié)構(gòu)

greatsql> show create table info /G*************************** 1. row ***************************       Table: infoCreate Table: CREATE TABLE `info` (  `id` int NOT NULL AUTO_INCREMENT,  `name` int NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `uk_name` (`name`)) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.01 sec)

梳理 innodb status 日志

  • 整理如下:

事務(wù)B4g28資訊網(wǎng)——每日最新資訊28at.com

T1B4g28資訊網(wǎng)——每日最新資訊28at.com

T2B4g28資訊網(wǎng)——每日最新資訊28at.com

操作B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (50,11)B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (60,8)B4g28資訊網(wǎng)——每日最新資訊28at.com

關(guān)聯(lián)的對(duì)象B4g28資訊網(wǎng)——每日最新資訊28at.com

表apple.info的唯一索引 uk_nameB4g28資訊網(wǎng)——每日最新資訊28at.com

表apple.info的唯一索引 uk_nameB4g28資訊網(wǎng)——每日最新資訊28at.com

持有的鎖B4g28資訊網(wǎng)——每日最新資訊28at.com

lock mode S waitingheap no 7 11,40(十六進(jìn)制為8,28)B4g28資訊網(wǎng)——每日最新資訊28at.com

lock_mode X locks rec but not gapheap no 7 11,40(十六進(jìn)制為8,28)B4g28資訊網(wǎng)——每日最新資訊28at.com

等待的鎖B4g28資訊網(wǎng)——每日最新資訊28at.com

lock mode S waitingheap no 7 11,40(十六進(jìn)制為8,28)B4g28資訊網(wǎng)——每日最新資訊28at.com

lock_mode X locks gap before rec insert intention waitingheap no 7 11,40(十六進(jìn)制為8,28)B4g28資訊網(wǎng)——每日最新資訊28at.com

  • 首先事務(wù)T2獲取到了uk_name中記錄11的 lock x,rec not not gap 鎖
  • 事務(wù)T1嘗試獲取uk_name中記錄11的lock s, next key lock,由于T2持有了記錄的獨(dú)占鎖,因此被T1堵塞
  • 事務(wù)T2嘗試獲取uk_name中記錄11的lock x, gap before rec,insert intention,但被堵塞

獲取業(yè)務(wù)歷史SQL語(yǔ)句

通過(guò)系統(tǒng)表方式

通過(guò)performance_schema.threads、performance_schema.events_statements_history、performance_schema.events_statements_history_long等系統(tǒng)表獲取歷史SQLB4g28資訊網(wǎng)——每日最新資訊28at.com

  • 根據(jù)GreatSQL thread id獲得線程id
greatsql> select PROCESSLIST_ID,THREAD_ID,THREAD_OS_ID from  performance_schema.threads where processlist_id in (15,16);+----------------+-----------+--------------+| PROCESSLIST_ID | THREAD_ID | THREAD_OS_ID |+----------------+-----------+--------------+|             15 |        61 |         5714 ||             16 |        62 |         5719 |+----------------+-----------+--------------+2 rows in set (0.00 sec)
  • 根據(jù)線程id獲得線程歷史SQL
greatsql> select THREAD_ID,EVENT_ID,CURRENT_SCHEMA,SQL_TEXT,MESSAGE_TEXT,EVENT_NAME,SOURCE from performance_schema.events_statements_history where thread_id in (61,62) order by THREAD_ID,EVENT_ID;+-----------+----------+----------------+---------------------------------+--------------------------------------------------------------------+--------------------------+---------------------------------+| THREAD_ID | EVENT_ID | CURRENT_SCHEMA | SQL_TEXT                        | MESSAGE_TEXT                                                       | EVENT_NAME               | SOURCE                          |+-----------+----------+----------------+---------------------------------+--------------------------------------------------------------------+--------------------------+---------------------------------+|        61 |     3762 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     3807 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     3852 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     3897 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     3942 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     3987 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     4032 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        61 |     4077 | apple          | begin                           | NULL                                                               | statement/sql/begin      | init_net_server_extension.cc:94 ||        61 |     4100 | apple          | insert into info values (40,11) | NULL                                                               | statement/sql/insert     | init_net_server_extension.cc:94 ||        61 |     4569 | apple          | insert into info values (60,8)  | NULL                                                               | statement/sql/insert     | init_net_server_extension.cc:94 ||        62 |     3215 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3260 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3305 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3350 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3395 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3440 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3485 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3530 | apple          | NULL                            | NULL                                                               | statement/com/Field List | init_net_server_extension.cc:94 ||        62 |     3575 | apple          | begin                           | NULL                                                               | statement/sql/begin      | init_net_server_extension.cc:94 ||        62 |     3598 | apple          | insert into info values (50,11) | Deadlock found when trying to get lock; try restarting transaction | statement/sql/insert     | init_net_server_extension.cc:94 |+-----------+----------+----------------+---------------------------------+--------------------------------------------------------------------+--------------------------+---------------------------------+20 rows in set (0.00 sec)
  • 觀察show engine innodb status中的GreatSQL thread id 16和GreatSQL thread id 15
  • 通過(guò)performance_schema.threads獲取THREAD_ID
  • 通過(guò)performance_schema.events_statements_history獲取THREAD_ID執(zhí)行的歷史SQL以及執(zhí)行時(shí)間

最終可復(fù)現(xiàn)出如下業(yè)務(wù)SQL:B4g28資訊網(wǎng)——每日最新資訊28at.com

事務(wù)B4g28資訊網(wǎng)——每日最新資訊28at.com

T1B4g28資訊網(wǎng)——每日最新資訊28at.com

T2B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com

begin;B4g28資訊網(wǎng)——每日最新資訊28at.com

begin;B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (40,11);B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (50,11);B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (60,8);B4g28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)解析binlog

$ mysqlbinlog -vv --base64-output=decode-rows  bin.000030B4g28資訊網(wǎng)——每日最新資訊28at.com

SET @@SESSION.GTID_NEXT= 'e319a624-b2ce-11ee-9aac-00163e62ca8a:8696'/*!*/;# at 10314#240128 16:52:35 server id 1024  end_log_pos 10390 CRC32 0x59edb313         Query        thread_id=18        exec_time=0        error_code=0SET TIMESTAMP=1706431955/*!*/;BEGIN/*!*/;# at 10390#240128 16:52:35 server id 1024  end_log_pos 10442 CRC32 0xc03dea61         Table_map: `apple`.`info` mapped to number 370# at 10442#240128 16:52:35 server id 1024  end_log_pos 10486 CRC32 0x670e0c66         Write_rows: table id 370 flags: STMT_END_F### INSERT INTO `apple`.`info`### SET###   @1=30 /* INT meta=0 nullable=0 is_null=0 */###   @2=30 /* INT meta=0 nullable=0 is_null=0 */# at 10486#240128 16:52:35 server id 1024  end_log_pos 10517 CRC32 0xab4e0d89         Xid = 598COMMIT/*!*/;# at 10517#240128 19:22:12 server id 1024  end_log_pos 10596 CRC32 0x4f4cf08e         GTID        last_committed=30        sequence_number=36        rbr_only=yes        original_committed_timestamp=1706440932450590        immediate_commit_timestamp=1706440932450590 transaction_length=378/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;# original_commit_timestamp=1706440932450590 (2024-01-28 19:22:12.450590 CST)# immediate_commit_timestamp=1706440932450590 (2024-01-28 19:22:12.450590 CST)/*!80001 SET @@session.original_commit_timestamp=1706440932450590*//*!*/;/*!80014 SET @@session.original_server_version=80026*//*!*/;/*!80014 SET @@session.immediate_server_version=80026*//*!*/;SET @@SESSION.GTID_NEXT= 'e319a624-b2ce-11ee-9aac-00163e62ca8a:8697'/*!*/;# at 10596#240128 16:53:16 server id 1024  end_log_pos 10672 CRC32 0xf222c003         Query        thread_id=15        exec_time=0        error_code=0SET TIMESTAMP=1706431996/*!*/;BEGIN/*!*/;# at 10672#240128 16:53:16 server id 1024  end_log_pos 10724 CRC32 0x20cb8c86         Table_map: `apple`.`info` mapped to number 370# at 10724#240128 16:53:16 server id 1024  end_log_pos 10768 CRC32 0xd8f53958         Write_rows: table id 370 flags: STMT_END_F### INSERT INTO `apple`.`info`### SET###   @1=40 /* INT meta=0 nullable=0 is_null=0 */###   @2=11 /* INT meta=0 nullable=0 is_null=0 */# at 10768#240128 16:53:40 server id 1024  end_log_pos 10820 CRC32 0x23f22580         Table_map: `apple`.`info` mapped to number 370# at 10820#240128 16:53:40 server id 1024  end_log_pos 10864 CRC32 0x182ecdef         Write_rows: table id 370 flags: STMT_END_F### INSERT INTO `apple`.`info`### SET###   @1=60 /* INT meta=0 nullable=0 is_null=0 */###   @2=8 /* INT meta=0 nullable=0 is_null=0 */# at 10864#240128 19:22:12 server id 1024  end_log_pos 10895 CRC32 0x57fd1d3c         Xid = 650COMMIT/*!*/;SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;DELIMITER ;# End of log file/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

根據(jù)binlog中部分SET @@SESSION.GTID_NEXT= 'e319a624-b2ce-11ee-9aac-00163e62ca8a:8697'該GTID的事務(wù)信息,可恢復(fù)T2,但T1執(zhí)行的語(yǔ)句由于被回滾了,則不會(huì)記錄到binlog,可開啟general log日志獲取排查B4g28資訊網(wǎng)——每日最新資訊28at.com

事務(wù)B4g28資訊網(wǎng)——每日最新資訊28at.com

T1B4g28資訊網(wǎng)——每日最新資訊28at.com

T2B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com

begin;B4g28資訊網(wǎng)——每日最新資訊28at.com

begin;B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (40,11);B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (50,11);B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

語(yǔ)句B4g28資訊網(wǎng)——每日最新資訊28at.com


B4g28資訊網(wǎng)——每日最新資訊28at.com

insert into info values (60,8);B4g28資訊網(wǎng)——每日最新資訊28at.com

分析死鎖

  • T1、T2開啟了一個(gè)事務(wù)
  • 隨后T2執(zhí)行了插入(40,11)的insert語(yǔ)句:insert into info values (40,11)
  • T1執(zhí)行了插入(50,11)的insert語(yǔ)句:insert into info values (50,11) 進(jìn)行唯一性沖突檢查,嘗試獲取LOCK_S
  • 然后T1所在的連接會(huì)將T2中的隱式鎖轉(zhuǎn)換為顯示鎖,此時(shí)T2將獲取Lock X, Rec_not_gap。由于T2的Lock X, Rec_not_gap與T1的LOCK S不兼容,因此T1被堵塞
  • 隨后,T2又執(zhí)行了(60,8)的insert語(yǔ)句:insert into info values (60,8) 由于其插入的唯一索引值是8,因此不存在主鍵沖突,直接執(zhí)行樂(lè)觀插入操作。執(zhí)行樂(lè)觀插入時(shí),需要檢查其它事務(wù)是否堵塞insert操作。其核心是獲取待插入記錄的下一個(gè)值(這里剛好是10),并獲取該記錄上的所有鎖,與需要添加的鎖判斷是否存在沖突。
  • T1持有了記錄11的LOCK_S鎖與T2的LOCK_X、LOCK_INSERT_INTENTION不兼容,因此T2被T1堵塞
  • 死鎖形成。

解決

? 適當(dāng)?shù)臏p少Unique索引B4g28資訊網(wǎng)——每日最新資訊28at.com

? 避免插入重復(fù)的值(唯一索引所在列)B4g28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-76478-0.html故障解析丨一次死鎖問(wèn)題的解決

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 詳解SCSS中For循環(huán):實(shí)現(xiàn)高效和動(dòng)態(tài)樣式的利器

下一篇: 在Java應(yīng)用程序中釋放峰值性能:配置文件引導(dǎo)優(yōu)化(PGO)概述

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過(guò)某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對(duì)Reader和Writer接口的組合,
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 這款新興工具平臺(tái),讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來(lái)越多,但是處理信息的效率卻成為一個(gè)瓶頸。于是各種工具應(yīng)運(yùn)而生,都在爭(zhēng)相解決我們的工作效率問(wèn)題。今天我要給大家介紹一款效率
  • ESG的面子與里子

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大“烤”之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報(bào)告。ESG是“環(huán)境保
  • 機(jī)構(gòu)稱Q2全球智能手機(jī)出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據(jù)外媒報(bào)道,研究機(jī)構(gòu)的報(bào)告顯示,由于需求下滑,今年二季度全球智能手機(jī)的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
  • Windows 11發(fā)布,微軟一改往常對(duì)老機(jī)型開放的態(tài)度

    距離 Windows 11 發(fā)布已經(jīng)過(guò)去一周,在過(guò)去一周里,很多數(shù)碼愛(ài)好者圍繞其對(duì) Android 應(yīng)用的支持、對(duì)老機(jī)型的升級(jí)問(wèn)題展開了激烈討論。與以往不同的是,在這次大
  • 2022爆款:ROG魔霸6 冰川散熱系統(tǒng)持續(xù)護(hù)航

    喜逢開學(xué)季,各大商家開始推出自己的新產(chǎn)品,進(jìn)行打折促銷活動(dòng)。對(duì)于忠實(shí)的端游愛(ài)好者來(lái)說(shuō),能夠擁有一款夢(mèng)寐以求的筆記本電腦是一件十分開心的事。但是現(xiàn)在的
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國(guó)時(shí)間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top