MYSQL innodb_deadlock_detect 打开数据库性能低,与事务回滚
最近在重新整理MYSQL 8的MY.CNF 的配置, 在和组员讨论的试试,我们的MYSQL DBA 提出一个问题, innodb_deadlock_detect 和 innodb_rollback_on_timeout, 以及事务回滚的问题.
这里需要明确的几个问题
1 innodb_deadlock_detect 是检测死锁的一种方法,从mysql 5.7.13引入的, 在官方MYSQL 8.0 的文档中提到在高并发的系统中还是建议不使用 innodb_deadlock_detect.
大部分文字都在重复一个观点,高并发使用死锁的检测,会引起性能的问题
那么基本上每个文字都在描述打开这个开关会影响性能,到底影响那些性能了
___________________________________________________________________________
在源代码的文档里面针对这个参数有这样一个描述, 在打开这个参数后会使用
lock_get_mode_str 这个操作 下面是调用这个操作的解释
以上的代码解释来源于 MYSQL 8.023 这个版本.
时间和精力的关系不想在弄下去,检测死锁的确是比不检测要耗费性能是一定的, 某篇关于这个参数打开后的性能测试的帖子中提到 lock_detect_recursive function 是性能的罪魁祸首.
另外需要注意的是 innodb_deadlock_detect 默认是打开的状态,需要在配置文件中关闭.
那么关闭后死锁的解决方式就变成通过 innodb_lock_wait_timeout 的方式默认的wait timeout 是50秒.
如果是OLTP 系统则建议,将这个值调的尽量小一些,而不是大,这样有利于OLTP 系统快速的解决问题,将问题回馈给应用程序,做下一步的处理,而不是HOLD在哪里.
那么下面的连锁的问题就来了, 如果死锁,其中一个事务回滚, 则根据MYSQL 默认的原则,只回滚最后的一条语句,而不是将所有的事务都回滚.
说到最后我们来捋一捋, 关于死锁以及事务回滚的MYSQL的配置我们是怎么做的
1 innodb_deadlock_detect = off
2 innodb_lock_wait_timeout = 1
3 innodb_rollback_on_timeout = on
这样配置的MYSQL 后,
1 在高并发的时候, innodb_deadlock_detect 影响性能的隐患解除了
2 我们可以根据系统的特性来设置 innodb_lock_wait_timeout 来针对不同的需求
3 设置innodb_rollback_on_timeout 设置后,整体的事务的原子性得到了保证.
本文分享自微信公众号 - AustinDatabases(AustinDatabases)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何打造一个高性能的前端智能推理引擎
什么是前端智能推理引擎 在前端智能推理引擎之前,我们先来说一下什么是”端智能”。 端智能(On-Device Machine Learning)是指把机器学习的应用放在端侧做。这里的“端侧”,是相对于云服务而言的。它可以是手机,也可以是 IOT 设备等。 传统的机器学习,由于模型大小、机器算力的问题,很多是放在服务端做的。比如 Amazon AWS 有“Amazon Rekognition Service”,Google 有 “Google Cloud Vision Service”。而随着以手机为代表的端侧设备算力的提高,以及模型设计本身的演进,大小更小、能力更强的模型逐渐能够部署到端上运行。 相比云端部署的方式,APP端拥有更直接的用户特征,同时具备如下优势: 实时性高,端侧处理可节省数据的网络传输时间。 节省资源,充分利用端侧算力和存储空间。 隐私性好,产生数据到消费数据都在端侧完成,避免传输引起的隐私泄露风险。 这些是端智能的优势,但它不是万金油,仍然存在一些局限性: 设备资源有限,端侧算力、存储是有限的,不能做大规模高强度的持续计算。 算法规模小,端侧算力小,而且单用户的数据...
- 下一篇
如何使用Python 进行数据可视化
在进行数据分析的时候,经常需要将数据进行可视化,以方便我们对数据的认识和理解。 0,Matplotlib 简介 Matplotlib 是一个可视化工具包,可以让我们使用Python 来可视化数据。 这里有一些官方资源你可以点击查看: Matplotlib 安装 Matplotlib 用户手册 Matplotlib 函数汇总 Matplotlib 模块索引 Matplotlib 示例库 Matplotlib 示例下载 Python code Jupyter notebooks 很多更高级的绘图库,也都是基于Matplotlib,比如seaborn,HoloViews,ggplot 等。 在使用 Matplotlib 时,经常需要用到 pyplot 模块,用下面代码引入: import matplotlib.pyplot as plt 下文中,都用plt 来代指pyplot。 说明: 这里我们只介绍几种简单的图,更多其它的图,可以查看官方手册。 下面的每个函数,只介绍了最简单的用法,其它更多的参数可以查看手册。 1,散点图 plt.scatter 函数用于绘制散点图。函数原型: scatt...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程