

主机类型:x3850 X6 操作系统:DB:CentOS Linux release 7.4.1708、APP:CentOS Linux release 7.2.1511 (Core) 存储:IBM存储,2TB,MULTIPATH 内存:64 G CPU型号:E7-4830 v3 @ 2.10GHz ( 4 U * 12 core) CPU核数:32CORE 数据库环境:5.7.27 事务隔离级别:READ-COMMITED
{"errorCode":"SYSTEM_ERROR","errorMsg":"nested exception is org. apache. ibatis.exceptions.PersistenceException:
Error updating database. Cause: ERR-CODE: [TDDL-4614 [ERR_EXECUTE_ON_MYSQL]
Deadlock found when trying to get lock;
The error occurred while setting parameters\n### SQL:
update A xxx
复制
通过分析日志定位、分析死锁原因; 追溯历史数据,分析关键指标的历史波动,这些关键指标可以用来做为数据库健康度参考指标。 用实际数据来验证推断,排除掉其它干扰因素,定位数据库问题的根本原因,帮助快速修复。






1、在非唯一索引(name)上找到(ddd,29)的索引项,加上X锁;
2、根据(ddd,29)找到主键索引的(29,ddd)记录,加X锁;
3、在非唯一索引(name)上找到(ddd,37)的索引项,加上X锁;
4、根据(ddd,29)找到主键索引的(37,ddd)记录,加X锁;
CREATE TABLE `A` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`create_date` datetime NOT NULL ,
`modified_date` datetime NOT NULL ,
`pay_name` varchar(256) NOT NULL ,
`pay_version` varchar(256) DEFAULT NULL ,
`identifier` varchar(256) NOT NULL ,
`seller_id` varchar(64) NOT NULL ,
`state` varchar(64) DEFAULT NULL ,
`fund_transfer_ order_ no` varchar(256) DEFAULT NULL,
PRIMARY KEY (`id`),UNIQUE KEY `uk_scene_identifier`
(KEY `idx_seller` (`seller_id`),
KEY `idx_seller_transNo` (`seller_id`,`fund_transfer_order_no`(20))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
复制
Transactions deadlock detected, dumping detailed information.
2021-05-19T21:44:23.516263+08:00 5877341 [Note] InnoDB:
*** (1) TRANSACTION:
TRANSACTION 173268495, ACTIVE 0 sec fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 304 lock struct(s), heap size 41168, 6 row lock(s), undo log entries 1
MySQL thread id 5877358, OS thread handle 47356539049728, query id 557970181 11.183.244.150 fin_instant_app updating
update 死锁语句
2021-05-19T21:44:23.516321+08:00 5877341 [Note] InnoDB:
*** (1) HOLDS THE LOCK(S):
RECORD LOCKS space id 173 page no 13726 n bits 248 index idx_seller_transNo of table `xxx`.`fund_transfer_stream` trx id 173268495 lock_mode X locks rec but not gap
Record lock, heap no 168 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
2021-05-19T21:44:23.516565+08:00 5877341 [Note] InnoDB:
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 173 page no 12416 n bits 128 index PRIMARY of table `xxx`.`fund_transfer_stream` trx id 173268495 lock_mode X locks rec but not gap waiting
Record lock, heap no 56 PHYSICAL RECORD: n_fields 17; compact format; info bits 0
2021-05-19T21:44:23.517793+08:00 5877341 [Note] InnoDB:
*** (2) TRANSACTION:
TRANSACTION 173268500, ACTIVE 0 sec fetching rows, thread declared inside InnoDB 81
mysql tables in use 1, locked 1
302 lock struct(s), heap size 41168, 2 row lock(s), undo log entries 1
MySQL thread id 5877341, OS thread handle 47362313119488, query id 557970189 11.131.81.107 fin_instant_app updating
update 死锁语句
复制
导致死锁的两条SQL语句。 事务1,持有索引idx_seller_transNo的锁,在等待获取PRIMARY的锁。 事务2,持有PRIMARY的锁,在等待获取idx_seller_transNo的锁。 因事务1和事务2之间发生循环等待,故发生死锁。 事务1和事务2当前持有的锁均为:lock_mode X locks rec but not gap
@Transactional(rollbackFor = Exception.class)
public int doProcessing(String sellerId, Long id, String fundTransferOrderNo) {
fundTreansferStreamDAO.updateFundStreamId(sellerId, id, fundTransferOrderNo);
return fundTreansferStreamDAO.updateStatus(sellerId, fundTransferOrderNo,"PROCESSING");
}
复制
KEY `idx_seller_transNo` (`seller_id`,`fund_transfer_order_no`(20))
复制
主键索引的叶子节点存的是整行数据。在InnoDB中,主键索引也被称为聚簇索引(clustered index)。 非主键索引的叶子节点的内容是主键的值,在InnoDB中,非主键索引也被称为非聚簇索引(secondary index)。
所有update都通过主键ID进行。 在同一个事务中,避免出现多条update语句修改同一条记录。

文章转载自数据与人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
墨天轮个人数说知识点合集
JiekeXu
427次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
419次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
379次阅读
2025-03-28 16:28:31
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
344次阅读
2025-04-15 23:49:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
343次阅读
2025-04-17 17:02:24
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
326次阅读
2025-04-15 14:48:05
云和恩墨杨明翰:安全生产系列之MySQL高危操作
墨天轮编辑部
302次阅读
2025-03-27 16:45:26
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
288次阅读
2025-04-07 12:14:29
MogDB 发布更新,解决 openGauss 数据库在长事务情况下Ustore表膨胀问题
MogDB
284次阅读
2025-04-17 10:41:41
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
191次阅读
2025-04-15 15:27:53