mysql innodb

62次阅读
没有评论

共计 1217 个字符,预计需要花费 4 分钟才能阅读完成。

本篇内容主要讲解“mysql innodb_deadlock_detect 检测和处理方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“mysql innodb_deadlock_detect 检测和处理方法是什么”吧!

innodb_deadlock_detect 是 MySQL 的一个系统变量。
版本:5.7.15
命令行格式:–innodb-deadlock-detect
影响范围:Global
参数类型:boolean
默认值:ON
作用:该选项使用了禁用 MySQL 的死锁检测功能的。在高并发系统上,当许多线程等待同一个锁时,死锁检测可能导致速度减慢。有时,当发生死锁时,如果禁用了死锁检测则可能会更有效,这样可以依赖 innodb_lock_wait_timeout 的设置进行事务回滚。
MySQL 默认情况下是开启了死锁检测的,InnoDB 自动检测发送死锁的事务,并回滚其中的一个事务或所有导致死锁的事务。InnoDB 会在导致死锁的十五中选择一个权重比较小的事务来回滚,这个权重值可能是由该事务 insert, updated, deleted 的行数决定的。
如果 innodb_table_locks = 1(默认值)并且 autocommit = 0,则 InnoDB 能感知到表锁的存在,并且上层的 MySQL 层知道行级锁。否则,InnoDB 无法检测到由 MySQL LOCK TABLES 语句设置的表锁或由除 InnoDB 之外的存储引擎设置的锁定的死锁。通过设置 innodb_lock_wait_timeout 系统变量的值来解决这些情况。
当 InnoDB 执行事务的完全回滚时,将释放由事务设置的所有锁。但是,如果单个 SQL 语句由于错误而回滚,则语句设置的某些锁可能会被保留。这是因为 InnoDB 以一种格式存储行锁,以致之后不能知道哪个锁由哪个语句设置。
如果 SELECT 调用事务中存储的函数,并且函数中的语句失败,则该语句将回滚。此外,如果在此之后执行 ROLLBACK,整个事务将回滚。
如果 InnoDB 监控器输出的最近死锁检测部分包含一条消息,指出 TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION,这表示处于等待的事务列表长度已达到限制 200。超过 200 个事务的等待列表被视为死锁,并且将回滚尝试检查等待列表的事务。如果锁定线程必须查看等待列表上的事务拥有的超过 1,000,000 个锁,则也可能发生相同的错误。
禁用死锁检测
可以通过选项:innodb_deadlock_detect 来关闭死锁检测。

到此,相信大家对“mysql innodb_deadlock_detect 检测和处理方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计1217字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)