博客
关于我
MySQL 实战 45 讲笔记 | 事务隔离和 MVCC
阅读量:562 次
发布时间:2019-03-10

本文共 1162 字,大约阅读时间需要 3 分钟。

这篇文章总结了《MySQL实战45讲》中的内容,重点梳理了事务隔离级别和相关的高级事务机制,旨在帮助理解数据库管理中的关键概念。

事务隔离级别

SQL 标准的事务隔离级别包括四个级别:读未提交、读提交、可重复读和串行化。其中,InnoDB 默认的隔离级别是可重复读。在可重复读隔离级别下,一个事务在整个执行过程中,都将看到与事务启动时一致的数据库状态。所有讨论均基于可重复读隔离级别进行。

回滚日志

在 MySQL 中,所有更新操作都会伴随回滚日志(undo log)的记录。这些记录允许数据库在需要时恢复数据到之前的状态。然而,长事务会导致回滚日志占用大量存储空间,影响性能。因此,建议采用短事务模式,通过显式事务提交(如 `set autocommit=1`)来避免长事务的发生。

对于频繁的事务操作,可以使用 `commit work and chain` 功能。这一功能在autocommit为1的情况下,允许事务提交后自动启动下一个事务,减少了事务处理的交互次数,提高了效率。

MVCC机制

InnoDB 的多版本并发控制机制(MVCC)通过为每个数据行记录多个版本来解决并发问题。每个版本都有唯一的事务 ID(trx_id),并用事务数组跟踪活跃事务。事务数组保存的最小值称为低水位,最大的值加一则为高水位。

一个事务能够访问特定数据行的版本,是根据以下规则决定的:只允许查看trx_id小于低水位的版本,或틴字处于[低水位, 高水位)区间内且不在事务数组中的版本。此外,事务更新操作是先读后写的,而“当前读”操作(如锁定共享模式或插入 :|update)只能读最新的值。

可重复读的核心是提供一致性读(consistent read),确保在事务过程中,读者只能看到事务启动时的数据库状态。若当前记录的行锁已被其他事务占用,系统将阻止当前事务的读操作,直到锁解除。需要注意的是,表结构本身不支持可重复读,因为每个数据行并不具备行事务 ID。

幻读与间隙锁

幻读指的是同一事务在两次查询同一范围内,旧次查询未看到新次查询看到的记录,主要发生在插入新行时。为解决幻读问题,InnoDB 引入了间隙锁(gap lock),防止新插入记录填补数据行之间的间隙。这种机制与行锁共同构成“下一个键锁”(next-key lock),定义了前开后闭的区间。

间隙锁虽然解决了幻读问题,但也增加了锁冲突概率。特别是在可重复读隔离级别下,间隙锁是必须的;但在读提交隔离级别下则没有。另外,由于间隙锁锁住了更大的键范围,这会影响系统的并发度。此外,为了保证数据一致性,当隔离级别为读提交时,应将binlog格式设置为行模式(row)。

综上所述,理解这些机制的工作原理和最佳实践,对于优化数据库性能和确保应用程序的一致性非常重要。

转载地址:http://zyjvz.baihongyu.com/

你可能感兴趣的文章
什么时候需要重写HashCode()
查看>>
2021-04-23
查看>>
Linux编程基础之创建两个子进程而不创建孙子进程
查看>>
另一个树的子树
查看>>
hadoop 分布式文件系统的计算和高可用
查看>>
2021-05-08
查看>>
【Linux】VMware Workstation 不可恢复错误: (vcpu-0)
查看>>
VS中 fatal error LNK1123: 转换到 COFF 期间失败 的解决方法
查看>>
关于Img标签在固定宽高的容器内部以图片比例缩放存在
查看>>
python3---读写文件、POST表单请求、HTML处理、列表分割遍历,进行暴力破解用户名与密码
查看>>
Android Studio基础项目-布局XML设置的实战-全屏显示登录界面,去除按钮深颜色
查看>>
python --- 监控客户端是否存活
查看>>
pyhton---异常处理的终极语法、网页访问基本读取、网页访问异常处理
查看>>
Centos 7.3 计算本目录下的以特定名字文件夹个数
查看>>
linux下编程出现 对'sem_wait'未定义的引用解决方案
查看>>
JavaFX学习笔记-颜色选择器ColorPicker与日期选择器DatePicker
查看>>
工具研究:(三)Nginx配置错误的路由时均统一跳转到登录界面
查看>>
前端框架(react+umi+dva+ant design pro )攻克: 二、react 父子组件通信(二)
查看>>
ant design pro v5去掉右边content区域的水印
查看>>
get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤(代码演示)
查看>>