位置: 编程技术 - 正文

深入解析MySQL的事务隔离及其对性能产生的影响(mysql深度解析)

编辑:rootadmin

推荐整理分享深入解析MySQL的事务隔离及其对性能产生的影响(mysql深度解析),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql sql解析,mysql深入理解,mysql深入理解,mysql sql解析,mysqlmgr深入理解,mysql 解析,mysqlmgr深入理解,mysql 解析,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。Repeatable Read(可重读) 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。Serializable(可串行化) 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。 这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。 不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。 幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

MySQL事务隔离级别对其性能的影响MySQL默认工作在级别三下。我们知道事务隔离是为了避免并发操作相互影响而导数据的不一致性。所以为了保证数据的一致性,就引入了事务隔离的功能。以上四个级别的对数据的一致性保护是逐步提高的。级别4对事务的隔离效果最好,但是性能最差,一般不再生产环境中使用。下面通过实例来检验不同级别下MySQL性能收到的影响。我的实验环境是:Redhat5.8+MySQL5.5首先我们这里启用两个session:1、验证级别一的特性我们在session A上进行的操作为:

在session B上的操作同session A,这里不再附上截图。 接下来我们就通过一系列的实验来观察READ-UNCOMMITTED到底是什么,它到底有什么特性,对我们的操作到底有什么影响。首先,我们可以看到表中的初始数据如下:

接下来我们在sessionA上更改其中的一条记录,更改结果如下:

注意:我们在上面启用了事务,但是我们在这里并没有进行commit操作。 接下来我们在sessionB中对刚才改过的表进行select查询,查询结果如下:

我们可以清楚的看到,虽然我们并没有对session A的结果进行commit,但是结果确实已经改变。因此在这种级别下,没有提交的操作会对数据的一致性有影响。因此,如果我们此时在session A上对上述操作进行回滚,我们会发现此时session B上的结果又回到原来最初的结果,这样就造成了数据的不一致性,这也称为数据的幻读现象,看起来是很诡异的事情。因此在某些场景下,我们应该避免这种现象的产生。但是这种级别也不是没有它的用武之地,比如当我们有大量数据需要写入,而读操作很少的时候,就适合用这种模式。可以看到session A回滚后,session B中的数据又变成最初的样子,这也称为幻读:

2、验证级别READ COMMITTED特性 首先把session A和session B的隔离级别都改为READ-COMMITTED,并且全部都开启事务,操作如下:

接下来我们查看tutors表的初始状态信息:

然后我们依然是对数据进行更新操作,更新之后仍然没有commit。我们可以看到在sessionA中,结果已经发生改变:

深入解析MySQL的事务隔离及其对性能产生的影响(mysql深度解析)

此时我们在session B中查看,发现结果依然维持不变:

但是,如果我们此时在session A中进行commit操作,我们就会发现,sessionB此时查询就会发生改变,这样也造成了数据的前后不一致性,也是数据的幻读:

3、数据的可重读 数据的可重读,也叫作REPEATABLE-READ,这是MySQL默认采用的事务隔离级别,有其优势,但是仍然没有从根本上解决数据的一致性问题。首先,还是让我们来测试一下,在这种级别下MySQL到底是如何工作的,又有哪些特性,我们又该怎样去操作。 我们先把REPEATABLE-READ的环境设置好,具体的操作方法如下:

然后我们在查看其初始数据,其结果如下:

我们在session A中修改数据,并进行commit,修改后的结果如下:

然后我们在session B中进行查看发现结果仍然没有任何改变:

这就是可重读的特性,只要本次会话不提交,尽管对方修改,但是结果仍然不变,只有在session B中也进行commit操作,所作的修改才会在sessionB中生效。 4、seriabliable这个级别是事务隔离安全性最好的,但是也是性能最差的,因为这个级别所有的操作都是串行进行的。一个操作没有提交,另一个受到影响的操作会处于阻塞状态。为了验证这种效果,我们先把环境设置好,具体为在session A和session B同时设置如下:

在session A 中对其任意字段进行修改,并且没有进行commit操作。此时挥发现sessionB中的查询操作会一直处于阻塞状态:

这就设串行化隔离的效果,也是为什么串行化隔离并发能力差的原因。

mysql性能优化之索引优化 作为免费又高效的数据库,mysql基本是首选。良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高

通过MySQL日志实时查看执行语句以及更新日志的教程 查看MySQL执行的语句想实时查看MySQL所执行的sql语句,类似mssql里的事件探查器。对my.ini文件进行设置,打开文件进行修改:basedir=E:/MySQL4.0.#bind-address=.

MySQL的使用中实现读写分离的教程 mysql-proxy实现读写分离MySQLProxy是一个处于你的client端和MySQLserver端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见

标签: mysql深度解析

本文链接地址:https://www.jiuchutong.com/biancheng/312449.html 转载请保留说明!

上一篇:简单整理MySQL的日志操作命令(mysql常见操作)

下一篇:mysql性能优化之索引优化(mysql5.7性能优化)

  • 增值税应交税费科目
  • 用友u8固定资产折旧怎么生成凭证
  • 软件公司企业成本预测
  • 已认证的专票发票在哪里
  • 政府补贴在企业怎么申请
  • 贴息为什么要付利息呢
  • 发票进项税额抵扣的最晚时间
  • 营业成本增加会导致
  • 股权投资损失账务处理
  • 公司租金收入交多少税
  • 银行本票通俗
  • 个体工商户年末计提的工资,次年怎么算
  • 开淘宝注册公司需要什么
  • 补充养老保险税收规定扣除率
  • 公务用车用油
  • 商品税目是什么意思4001
  • 自购自销金银首饰应纳消费税如何处理?
  • 公司钱被取走怎么处理
  • 减免的城建税如何申报
  • 长期借款和短期借款时间
  • 增值税专用发票和普通发票的区别
  • 商业一般纳税人税率多少
  • PHP:Memcached::deleteMultiByKey()的用法_Memcached类
  • 完工产品成本怎么算
  • 应付票据转让会计分录
  • 入固定资产含税吗
  • three.js 教程
  • php登录注册页面完整代码
  • javascript手机编程
  • flex布局教程实例篇
  • Delete `␍` 最简单最有效的解决方法和解释(VScode)
  • 阿里云 gtm
  • 深度学习之bottleneck layer
  • sed多个命令匹配条件格式
  • 去年的所得税计提多了怎么做分录
  • 关于我和鬼变成家人的那件事
  • 织梦前台数据不能存入中文
  • 报销人和收款人不一致钱打到哪个账户
  • 固定资产原值和净值在报表哪里看
  • 退预收款需要对账吗
  • 暂估入账后续处理
  • sql2008附加数据库
  • db2 -968
  • 去年留抵税额会计分录
  • 个人出租房屋需要缴纳个税吗
  • 政策性搬迁涉及的税种
  • 折旧后的剩余价值叫什么
  • 应付股利科目怎么结转
  • 公司对公账户没钱了辞退员工
  • 小规模增值税减按1%缴纳,如何申报
  • 利税总额计算公式表
  • 住房公积金的账户状态是封存是什么意思
  • 确认应付职工薪酬如何计算
  • 房地产成本核算对象
  • 净利润为负数会计分录
  • 电子银行承兑汇票到期怎么兑现
  • 会计怎么做工资单
  • 如何远程连接小米摄像头
  • sql server修改数据表
  • 无法安装mysql数据库
  • 在windows中打开一个窗口后
  • winxp怎么做系统
  • 忘记mysql root密码的解决方法
  • linux系统中命令什么大小写
  • shell程序中定义的函数能不能有参数
  • cocos2dx环境搭建
  • 机械革命系统重装官方教程
  • javascript内置对象应用团购
  • 使用ssh登录远程服务器有两种方法
  • unity的monodevelop
  • 安卓手机更新时间
  • python简单gui
  • 四川省国家税务局电子税务局
  • 纪检委是干什么工作的能管理税务管理局吗
  • 北京税务跨区迁移不予受理,原因是什么
  • 长沙税务局网上开票
  • 银行关联方认定标准是什么
  • uk怎么查看发票开票额度
  • 职工疗养费可以税前扣除吗
  • 单位轿车出售怎么处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设