数据库事务

数据库事务是数据库系统执行过程中的一个逻辑处理单元,保证一个数据库操作要么成功,要么失败。

数据库事务具有以下四个基本属性:

原子性(Atomicity)

一致性(Consistent)

隔离性(Isolation)

持久性(Durable)

正是这些特性,才保证了数据库事务的安全性。而在MySQL中,鉴于MyISAM存储引擎不支持事务,MySQL的事务都是在InnoDB存储引擎的基础上进行的。

事务隔离机制

InnoDB实现了两种类型的锁机制:共享锁(S)和排他锁(X)。

共享锁允许一个事务读数据,不允许修改数据,如果其他事务要再对该行加锁,只能加共享锁;

排他锁是修改数据时加的锁,可以读取和修改数据,一旦一个事务对该行数据加锁,其他事务将不能再对该数据加任务锁。

在操作数据的事务中,不同的锁机制会产生以下几种不同的事务隔离级别,不同的隔离级别分别可以解决并发事务产生的几个问题,对应如下:

未提交读(Read Uncommitted):在事务A读取数据时,事务B读取和修改数据加了共享锁。这种隔离级别,会导致脏读、不可重复读以及幻读。

已提交读(Read Committed):在事务A读取数据时增加了共享锁,一旦读取,立即释放锁,事务B读取修改数据时增加了行级排他锁,直到事务结束才释放锁。也就是说,事务A在读取数据时,事务B只能读取数据,不能修改。当事务A读取到数据后,事务B才能修改。这种隔离级别,可以避免脏读,但依然存在不可重复读以及幻读的问题。

可重复读(Repeatable Read):在事务A读取数据时增加了共享锁,事务结束,才释放锁,事务B读取修改数据时增加了行级排他锁,直到事务结束才释放锁。也就是说,事务A在没有结束事务时,事务B只能读取数据,不能修改。当事务A结束事务,事务B才能修改。这种隔离级别,可以避免脏读、不可重复读,但依然存在幻读的问题。

可序列化(Serializable):在事务A读取数据时增加了共享锁,事务结束,才释放锁,事务B读取修改数据时增加了表级排他锁,直到事务结束才释放锁。可序列化解决了脏读、不可重复读、幻读等问题,但隔离级别越来越高的同时,并发性会越来越低。

InnoDB中的RC和RR隔离事务是基于多版本并发控制(MVCC)实现高性能事务。一旦数据被加上排他锁,其他事务将无法加入共享锁,且处于阻塞等待状态,如果一张表有大量的请求,这样的性能将是无法支持的。

MVCC对普通的 Select 不加锁,如果读取的数据正在执行Delete或Update操作,这时读取操作不会等待排它锁的释放,而是直接利用MVCC读取该行的数据快照(数据快照是指在该行的之前版本的数据,而数据快照的版本是基于undo实现的,undo是用来做事务回滚的,记录了回滚的不同版本的行记录)。MVCC避免了对数据重复加锁的过程,大大提高了读操作的性能。

锁具体实现算法

InnoDB既实现了行锁,也实现了表锁。行锁是通过索引实现的,如果不通过索引条件检索数据,那么InnoDB将对表中所有的记录进行加锁,其实就是升级为表锁了。

行锁的具体实现算法有三种:record lock、gap lock以及next-key lock。record lock是专门对索引项加锁;gap lock是对索引项之间的间隙加锁;next-key lock则是前面两种的组合,对索引项及其之间的间隙加锁。

Record Lock:单个行记录上的锁。

Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。

Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。

只在可重复读或以上隔离级别下的特定操作才会取得gap lock或next-key lock;

在Select 、Update和Delete时,除了基于唯一索引的查询之外,其他索引查询时都会获取gap lock或next-key lock,即锁住其扫描的范围。

优化高并发事务方案

1. 结合业务场景,使用低级别事务隔离

2. 避免行锁升级表锁

在InnoDB中,行锁是通过索引实现的,如果不通过索引条件检索数据,行锁将会升级到表锁。表锁是会严重影响到整张表的操作性能的,所以应该避免它。

3. 控制事务的大小,减少锁定的资源量和锁定时间长度

Reference

mysql事务能支持多大_MySQL事务调优相关推荐

  1. linux mysql io压力大_MySQL性能调优(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  2. mysql时间复杂度o的n次方_MySQL性能测试调优

    MySQL性能测试调优 操作系统 基本操作 查看磁盘分区mount选项 $ mount 永久修改分区mount选项(系统重启后生效) 修改文件 /etc/fstab 中对应分区的mount optio ...

  3. Spark商业案例与性能调优实战100课》第20课:大数据性能调优的本质和Spark性能调优要点分析

    Spark商业案例与性能调优实战100课>第20课:大数据性能调优的本质和Spark性能调优要点分析 基于本元想办法,大智若愚,大巧若拙!深入彻底的学习spark技术内核!

  4. mysql 事务隔离级别实现原理_MySQL事务隔离级别和实现原理 - 米扑博客

    开发中经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗, 事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢? MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引 ...

  5. mysql事务中怎么更改空值_MySQL事务

    1.事务 1.事务特性--ACID Atomicity(原子性):要么全做,要么不做,不能只做一半(银行转账) Consistency(约束性):事务的前后,约束都能满足 Isolation(依赖性) ...

  6. MYSQL 那点破事,索引、SQL调优、事务、B+树、分表 ....

    微信搜索 [微观技术],关注这个不喜欢内卷的程序员. 精彩文章汇总 GitHub https://github.com/aalansehaiyang/technology-talk ,Star 12K ...

  7. mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  8. Mysql 参数最佳实践_MySQL参数调优最佳实践

    前言 很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释: 哪一些参数不能修改,那一些参数可以修改: 这些提供修改的参数是不是已经是最佳设置,如何 ...

  9. [inside]MySQL 5.7 并行复制实现原理与调优

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持"真正&quo ...

最新文章

  1. javaweb学习总结(二十三)——jsp自定义标签开发入门
  2. 工作总结20190121
  3. JAVA NIO编程入门(二)
  4. 软件问题造成的经济损失案例_公司印章管理使用哪些行为会造成法律风险隐患...
  5. 用位组函数来计算每个月中用户访问网页的天数。
  6. 11小时 python自动化测试从入门到_从设计到开发Python接口自动化测试框架实战,资源教程下载...
  7. mysql count里面能加条件吗_select count(1) 和 count(*),哪个性能更好?
  8. tomcat配置https_「Java」 - Tomcat amp; 配置HTTPS
  9. Python实践:猜数字小程序Collatz序列
  10. java 泛洪攻击_网易有道后端实习面经
  11. “管家婆”软件用于维修管理 (转)
  12. VBA版本获取ClientKey
  13. 9月1日起施行《中华人民共和国数据安全法》发布(附全文
  14. 解决通过雪花算法生成的id前端接受数据精度丢失问题
  15. Total Variation
  16. Linux上接收广播
  17. 在Deepin 15.11系统中遇到微信版本过低不能登录的解决方法
  18. SQL 语句:不得使用外键与级联,一切外键概念必须在应用层解决
  19. 常用的CSS属性列表汇总
  20. 计算机屏幕位置高低,电脑显示器的最佳位置

热门文章

  1. ubuntu常见符号
  2. 【Xilinx】如何用sdk编译vcu-qt
  3. 苹果应用商店审核_应用怎样上架 App Store?必须过苹果审核团这一关
  4. php发卡8.0源码_老米卡php发卡系统源码
  5. 朱松纯:AI从感知走向认知是必然趋势
  6. Attention Is All You Need (NIPS 2017)
  7. 查看Windows磁盘分区块大小的若干种办法
  8. 解决Windows系统自带共享代理软件导致的断网问题
  9. 小学数学与计算机整合课优质教案,数学教案-小学数学与信息技术整合教案
  10. 2021年起重机司机(限桥式起重机)证考试及起重机司机(限桥式起重机)实操考试视频