今天,某个环境又发生了死锁,如下:

*** (1) TRANSACTION:
TRANSACTION 735307073, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 6 lock struct(s), heap size 1184, 3 row lock(s), undo log entries 1
MySQL thread id 2754, OS thread handle 0x7f29cd89a700, query id 751744317 127.0.0.1 osm update
insert into tb_trd_secu_command(
machine_date, company_no, product_id,
product_code, product_name, unit_id, unit_code,
unit_name, asset_account, stock_account, command_operator,
command_executor, command_date, command_time, command_id,
batch_no, exchange_no, asset_type, stock_type,
stock_code, stock_name, currency_type, command_dir,
limit_price, command_qty, command_amt, order_qty,
cancel_qty, command_status, execution_status, execution_amt,
execution_qty, frozen_amt)
value(
v_machine_date, v_company_no, v_product_id,
v_product_code, v_product_name, v_unit_id, v_unit_code,
v_unit_name, v_asset_account, v_stock_account, v_command_operator,
v_command_executor, v_command_date, v_command_time, v_command_id,
v_batch_no, v_exchange_no, v_asset_type, v_stock_type,
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 10538 page no 4 n bits 296 index `idx_tb_trd_secu_command_1` of table `db_trd`.`tb_trd_secu_command` trx id 735307073 lock_mode X locks gap before rec insert intention waiting
*** (2) TRANSACTION:
TRANSACTION 735307149, ACTIVE 0 sec inserting, thread declared inside InnoDB 1
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1184, 2 row lock(s), undo log entries 1
MySQL thread id 2744, OS thread handle 0x7f29cd8db700, query id 751750715 127.0.0.1 osm update
insert into tb_trd_secu_command(
machine_date, company_no, product_id,
product_code, product_name, unit_id, unit_code,
unit_name, asset_account, stock_account, command_operator,
command_executor, command_date, command_time, command_id,
batch_no, exchange_no, asset_type, stock_type,
stock_code, stock_name, currency_type, command_dir,
limit_price, command_qty, command_amt, order_qty,
cancel_qty, command_status, execution_status, execution_amt,
execution_qty, frozen_amt)
value(
v_machine_date, v_company_no, v_product_id,
v_product_code, v_product_name, v_unit_id, v_unit_code,
v_unit_name, v_asset_account, v_stock_account, v_command_operator,
v_command_executor, v_command_date, v_command_time, v_command_id,
v_batch_no, v_exchange_no, v_asset_type, v_stock_type,
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 10538 page no 4 n bits 296 index `idx_tb_trd_secu_command_1` of table `db_trd`.`tb_trd_secu_command` trx id 735307149 lock mode S locks gap before rec
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 10538 page no 4 n bits 296 index `idx_tb_trd_secu_command_1` of table `db_trd`.`tb_trd_secu_command` trx id 735307149 lock_mode X locks gap before rec insert intention waiting
*** WE ROLL BACK TRANSACTION (2)

其中idx_tb_trd_secu_command_1是唯一索引。

看了下参数,当前隔离级别是read-committed,不过参数innodb_locks_unsafe_for_binlog是默认值OFF。

又仔细看了下官方文档, innodb_locks_unsafe_for_binlog和read-committed一方面是一样的,启用后,可以使得InnoDB gap锁最小化,但是在两种场景(外键约束和唯一索引)中,仍然不可避免的存在gap锁。

不管事务管理级别如何设置,只要存在唯一性约束并且可能insert/delete/update同一key值的记录,死锁都将无法100%的避免,只能是概率降低。

mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例相关推荐

  1. mysql索引commit卡死_mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例...

    今天,某个环境又发生了死锁,如下: *** (1) TRANSACTION: TRANSACTION 735307073, ACTIVE 0 sec inserting mysql tables in ...

  2. mysql 事物 锁行 测试_MySQL Transaction--RR事务隔离级别下加锁测试

    ============================================================================== 按照非索引列更新 在可重复读的事务隔离级别 ...

  3. MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?

    1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...

  4. mysql trans begin_[原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?...

    Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...

  5. mysql选什么隔离级别_互联网项目中mysql应该选什么事务隔离级别

    摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...

  6. 互联网项目中MySQL应该选什么事务隔离级别

    引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?"   你:"读未提交,读已提交,可重复读,串行化四个!默认是可重 ...

  7. MySQL 事务 | ACID、四种隔离级别、并发带来的隔离问题、事务的使用与实现

    文章目录 事务 ACID 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed (读已提交) Repea ...

  8. mysql重复读导致余额不对_我所理解的MySQL之四:事务、隔离级别及MVCC

    mysql教程栏目介绍MySQL相关的事务.隔离级别及MVCC. MySQL 系列的第四篇,主要内容是事务,包括事务 ACID 特性,隔离级别,脏读.不可重复读.幻读的理解以及多版本并发控制(MVCC ...

  9. insert时调用本身字段_MySQL RC级别下并发insert锁超时问题 - 案例验证

    作者:网易数据库团队 DDB(网易杭研自研的MySQL数据库中间件产品)团队小伙伴发现了一个问题,觉得比较奇怪.于是找到我们,希望解释下.过程中除解释了问题的现象,也通过代码了解了更多的InnoDB ...

最新文章

  1. 深度学习Pytorch框架Tensor张量
  2. 强烈推荐几个好玩的深度学习github项目分享!
  3. 联想输入快捷键_UG软件F8快捷键和笔记本电脑F8快捷键冲突的解决方法
  4. 如何将APACHE许可证应用于您的工作
  5. 团队作业9——第二次项目冲刺2(Beta阶段)
  6. [转载] 杜拉拉升职记——20 两位同僚
  7. C++ 静态线性表的顺序存储结构(数组实现)
  8. 鸿蒙系统公测版发布,鸿蒙OS2.0系统公测版什么时候发布-适配机型
  9. java null错误事例_java – aspectJ示例中的nullpointer异常
  10. 机器学习+深度学习相关课程地址总结
  11. Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解
  12. SQL删除数据delete
  13. 小米12 Ultra将搭载5倍潜望镜头:自研技术加持 成像相对更好
  14. 【微信小程序】身份证拍照、上传并OCR识别
  15. .NET C# Socket产品性能测试、性能对比报告(包含SuperSocket、HPSocket.Net、TouchSocket)
  16. 时代正燃 | 全民健身运动意图大数据报告
  17. 整理的金蝶云苍穹初级练习题
  18. 关于移动端适配的几个方法,快速构建响应式网站必备知识
  19. 夸克链创始人周期:把区块链的好处带给千家万户
  20. 项目管理领域关键知识点之横道图和网络图

热门文章

  1. 抓取流量分析恶意软件或泄密流量(精)
  2. Linux 主机超全渗透测试命令汇总
  3. Python2和Python3中@abstractmethod的用法
  4. tf.nn 和tf.layers以及tf.contrib.layers的简单区别(转)
  5. 阿里云oss上传图片
  6. 码农的自我修炼之路-----BST
  7. 对于有志于成为架构师的开发者,支付宝架构团队有何建议?
  8. 条款12:复制对象时勿忘其每一个部分
  9. C#中的引用传递、值传递
  10. 用Delphi制作网络游戏外挂