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

故障解析丨一次死鎖問題的解決

開發(fā) 前端
根據binlog中部分SET @@SESSION.GTID_NEXT= 'e319a624-b2ce-11ee-9aac-00163e62ca8a:8697'該GTID的事務信息,可恢復T2,但T1執(zhí)行的語句由于被回滾了,則不會記錄到binlog,可開啟general log日志獲取排查。

背景

業(yè)務端遇到報錯為"Deadlock found when trying to get lock; try restarting transaction"則表明有死鎖發(fā)生

名稱

配置

數據庫版本

GreatSQL 8.0.26

隔離級別

Read-Commited

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_idle
srv_master_thread log flush and writes: 0
----------
SEMAPHORES
----------
-------------
RW-LATCH INFO
-------------
Total number of rw-locks 132361
OS WAIT ARRAY INFO: reservation count 11180
OS WAIT ARRAY INFO: signal count 11177
RW-shared spins 0, rounds 0, OS waits 0
RW-excl spins 0, rounds 0, OS waits 0
RW-sx spins 0, rounds 0, OS waits 0
Spin 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 inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 1192, 1 row lock(s), undo log entries 1
MySQL thread id 16, OS thread handle 140737023432448, query id 652 127.0.0.1 root update
insert 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 waiting
Record 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 waiting
Record 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 inserting
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1192, 2 row lock(s), undo log entries 2
MySQL thread id 15, OS thread handle 140737024022272, query id 653 127.0.0.1 root update
insert 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 gap
Record 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 waiting
Record 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
------------

查看表結構

greatsql> show create table info \G
*************************** 1. row ***************************
       Table: info
Create 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_ci
1 row in set (0.01 sec)

梳理 innodb status 日志

  • 整理如下:

事務

T1

T2

操作

insert into info values (50,11)

insert into info values (60,8)

關聯的對象

表apple.info的唯一索引 uk_name

表apple.info的唯一索引 uk_name

持有的鎖

lock mode S waitingheap no 7 11,40(十六進制為8,28)

lock_mode X locks rec but not gapheap no 7 11,40(十六進制為8,28)

等待的鎖

lock mode S waitingheap no 7 11,40(十六進制為8,28)

lock_mode X locks gap before rec insert intention waitingheap no 7 11,40(十六進制為8,28)

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

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

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

通過performance_schema.threads、performance_schema.events_statements_history、performance_schema.events_statements_history_long等系統(tǒng)表獲取歷史SQL

  • 根據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)
  • 根據線程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
  • 通過performance_schema.threads獲取THREAD_ID
  • 通過performance_schema.events_statements_history獲取THREAD_ID執(zhí)行的歷史SQL以及執(zhí)行時間

最終可復現出如下業(yè)務SQL:

事務

T1

T2

語句

begin;

begin;

語句


insert into info values (40,11);

語句

insert into info values (50,11);


語句


insert into info values (60,8);

通過解析binlog

$ mysqlbinlog -vv --base64-output=decode-rows  bin.000030

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=0
SET 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 = 598
COMMIT/*!*/;
# 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=0
SET 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 = 650
COMMIT/*!*/;
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*/;

根據binlog中部分SET @@SESSION.GTID_NEXT= 'e319a624-b2ce-11ee-9aac-00163e62ca8a:8697'該GTID的事務信息,可恢復T2,但T1執(zhí)行的語句由于被回滾了,則不會記錄到binlog,可開啟general log日志獲取排查

事務

T1

T2

語句

begin;

begin;

語句


insert into info values (40,11);

語句

insert into info values (50,11);


語句


insert into info values (60,8);

分析死鎖

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

解決

? 適當的減少Unique索引

? 避免插入重復的值(唯一索引所在列)

責任編輯:武曉燕 來源: GreatSQL社區(qū)
相關推薦

2011-05-06 10:32:06

硬盤鍵盤

2022-01-10 10:26:30

Kubernetes抓包環(huán)境

2023-10-11 22:24:00

DubboRedis服務器

2019-03-15 16:20:45

MySQL死鎖排查命令

2011-04-13 09:21:30

死鎖SQL Server

2019-06-19 08:59:52

數據庫死鎖堆棧

2019-04-15 13:15:12

數據庫MySQL死鎖

2021-12-12 18:12:13

Hbase線上問題

2010-07-30 16:10:45

UPS設備燒毀故障分析

2017-12-19 14:00:16

數據庫MySQL死鎖排查

2019-04-18 10:55:00

故障演練流量

2019-12-27 10:43:48

磁盤數據庫死鎖

2020-09-16 08:26:18

圖像定位尺寸

2011-08-12 09:30:02

MongoDB

2021-12-02 07:50:30

NFS故障內存

2021-01-08 13:52:15

Consul微服務服務注冊中心

2021-06-08 08:38:36

MySQL數據庫死鎖問題

2023-04-06 10:52:18

2022-08-29 18:14:55

MQ數據不丟失

2016-11-16 09:25:15

WindowsWindow 8Windows 10
點贊
收藏

51CTO技術棧公眾號

国产成人精品一区| 欧美激情精品久久久久久大尺度| 一区二区三区欧美在线| 99久久婷婷国产综合精品青牛牛 | 欧美一区视频在线| 好了av在线| 一区二区三区四区亚洲| 亚欧精品在线| 国产国产精品| 91精品91久久久久久| 四虎成人在线| 欧美丰满少妇xxxbbb| 嫩草影院发布页| 久久先锋影音av鲁色资源 | 8848成人影院| 亚洲天堂2020| 少女频道在线观看免费播放电视剧| 亚洲激情一二三区| 91视频最新入口| 国产伦精品一区二区三区视频青涩| 国产伦一区二区三区色一情| 精品一区二区三区在线| 久久久久免费精品国产| 九九九精品视频| 国产丝袜精品第一页| 18av在线播放| 在线观看视频一区| 黄页网址在线观看| 中文字幕中文字幕在线一区| 色七七在线观看| 北岛玲一区二区三区四区| 伊人色综合影院| 日韩国产高清影视| 91精品久久久久久久| 亚洲精品极品| 久久久中精品2020中文| 天堂中文av在线资源库| 精品视频在线免费看| 性色av一区| 天天综合天天综合色| 最新二区三区av| 亚洲人成伊人成综合网小说| 黄色av免费在线播放| 成人福利视频在线| 人人妻人人澡人人爽欧美一区双| 久久99国产精品久久99| 亚洲三区视频| 国产综合久久久久久久久久久久| 日韩性感在线| 精品综合免费视频观看| 天天综合五月天| 国产伦理精品不卡| 男人添女人下部视频免费| 国产麻豆精品在线| 久久久久久免费看| xnxx国产精品| 欧美成人黄色网址| 欧美国产视频在线| 日本成本人片免费观看| 精品露脸国产偷人在视频| 新欧美整片sss第一页| 色综合色狠狠天天综合色| av色图一区| 亚洲第一男人天堂| 我爱我色成人网| 欧美黑人极品猛少妇色xxxxx| 欧美日韩精品一区二区三区在线观看| 国产97色在线| 午夜欧美精品| 日日夜夜精品网站| 国产成人亚洲综合a∨猫咪| 免费国产黄色网址| 亚洲国产精品激情在线观看| 黄网址在线播放免费| 欧美日韩国产精品一区| 日本中文字幕在线2020| 日韩国产精品视频| 电影中文字幕一区二区| 国产精品久久中文| 在线日本成人| 亚洲日本精品一区| 久久综合狠狠综合久久综合88| 日本18视频网站| 欧美日韩一级二级| 成人看片网页| 国产精品露脸自拍| 日本sm残虐另类| 丝袜制服一区二区三区| 五月婷婷欧美视频| 韩国成人免费视频| 欧美黑人xxx| 欧美日韩精品免费观看视频完整| 亚洲天堂电影网| 国产女主播一区| 日韩三级影院| 欧美成人精品h版在线观看| 久久精品国产亚洲夜色av网站| 秋霞久久久久久一区二区| 2021久久国产精品不只是精品| 四虎影视在线播放| 中文字幕av一区二区三区谷原希美 | 九色porn| 欧美tickling网站挠脚心| 亚洲成人黄色| 国产伦一区二区三区色一情| 99视频精品在线| 国产三级在线观看| 久久久精品久久久| 伊人久久婷婷| 男人的天堂日韩| 日韩欧美成人一区二区| 香蕉一区二区| 日韩中文字幕在线不卡| 欧美日韩一区二区三区| 日韩久久一区| 乱色588欧美| 亚洲天堂精品在线观看| 蜜桃麻豆影像在线观看| 国产精品精品久久久久久| 国产乱码精品一区二区三区五月婷| 91污色多多| 中文字幕精品久久| 四色永久网址| 91精品秘密在线观看| 欧美日韩一区在线观看视频| 国产在线精品二区| 色偷偷噜噜噜亚洲男人| 欧美老肥妇做.爰bbww| 国产欧美日韩不卡免费| 国内精品自线一区二区三区视频| 欧美在线网址| 亚洲成人偷拍| 国产主播在线看| 成人精品一区二区三区| 久久久免费观看| 精品国产91洋老外米糕| 91国内精品白嫩初高生| 俺来也官网欧美久久精品| 成人日日夜夜| 中文字幕第5页| jizzjizz在线观看| 成人18在线| 在线视频资源站| 国产精品亚洲二区在线观看| 成人国内精品久久久久一区| 国产视频精品免费播放| 色狠狠av一区二区三区| 欧美激情在线一区二区三区| 日本在线观看不卡视频| 91精品成人| 精品网站999| 国产精品草草| 国产成人在线影院| 久久蜜桃一区二区| av在线不卡电影| 欧美无砖专区一中文字| 亚洲男同性恋视频| 资源视频在线播放免费| 久久久伊人日本| 99久久99久久精品免费看蜜桃| 69av成人| 国产精品美女在线播放| 精品福利在线导航| 人人狠狠综合久久亚洲| 青草在线视频在线观看| 免费在线成人av电影| 91麻豆精品国产| 亚洲综合二区| 欧美人与牲禽动交com| 欧美一区二区综合| 欧美一个色资源| 久久成人免费日本黄色| 两个人看的在线视频www| 亚洲一一在线| 爽爽爽爽爽爽爽成人免费观看| 92国产精品观看| www.成人网| 黄网站app在线观看下载视频大全官网 | 37pao成人国产永久免费视频| 中文综合在线观看| 99国产精品久久久久久久久久| 精品一区二区三区四区五区| 午夜激情av在线| 国产精品久久久久福利| 欧美亚洲综合色| 美女爽到高潮91| 成人黄色毛片| 羞羞小视频在线观看| 成人两性免费视频| 欧美男女性生活在线直播观看| 久久成人久久鬼色| 国产精品视频一区二区三区综合| 2018av男人天堂| 国产亚洲精品美女久久久m| 精品国产91久久久久久久妲己 | 国产免费一区二区视频| 免费91在线视频| 亚洲一区在线观看网站| 性欧美暴力猛交另类hd| 国产69精品久久久久9999人|