首页 > 数据库 >Mysql事务底层原理

Mysql事务底层原理

时间:2023-02-02 14:34:55浏览次数:53  
标签:事务 Log 数据 修改 Mysql 磁盘 Redo 底层

本文转载自https://www.cnblogs.com/yidengjiagou/p/16413825.html

 

事务有四大特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称ACID。

原子性是指事务中所有操作要么全部成功,要么全部失败。

一致性是指事务执行前后,数据始终处于一致性状态,不会出现数据丢失。

隔离性是指事务提交前的中间状态对其他事务不可见,即相互隔离。

持久性是指事务提交后,数据的修改永久保存在数据库中。

原子性是undo log实现的,一致性是由代码逻辑层面保证的,隔离性是由mvcc实现的,持久性是基于redo log实现的。

如果没有Redo Log的话,会发生什么?

修改数据的过程就变成这样了:

  1. 从磁盘加载数据到内存
  2. 在内存中修改数据
  3. 把新数据持久化到磁盘

  

这样做,会有严重的性能问题。

  1. InnoDB在磁盘中存储的基本单元是页,可能本次修改只变更一页中几个字节,但是需要刷新整页的数据,就很浪费资源。
  2. 一个事务可能修改了多页中的数据,页之间又是不连续的,就会产生随机IO,性能更差。

所以为了提高写入性能,于是就引入了Redo Log。

看一下引入Redo Log后修改流程:

  1. 从磁盘加载数据到内存
  2. 在内存中修改数据
  3. 把新数据写到Redo Log Buffer
  4. Redo Log Buffer中数据持久化到Redo Log文件中
  5. Redo Log文件中数据持久化到数据库磁盘中

  

Undo Log(回滚日志):

Undo Log记录的是逻辑日志,用来回滚事务时,恢复到修改前的数据。

  

MVCC(多版本并发控制,Multi-Version Concurrency Control):

记录的是某个时间点上的数据快照,用来实现不同事务之间数据的隔离性。

当前读: 读取数据的最新版本,并对数据进行加锁。

快照读: 读取数据的历史版本,不对数据加锁。

在当前读的情况下,是通过加锁来解决幻读。

在快照读的情况下,是通过MVCC来解决幻读。

 

标签:事务,Log,数据,修改,Mysql,磁盘,Redo,底层
From: https://www.cnblogs.com/caroline2016/p/17085894.html

相关文章

  • mysql创建还原点
    setautocommit=0;insertintot1(name)values("user1");savepointp1;insertintot1(name)values("user2");svaepointp2;insertintot1(name)values("user3")......
  • Mysql导出大量数据
    outfile导出文件selectnamefromt1intooutfile"/tmp/test.txt"infile导入文件导入到表t1中的name列loaddatainfile"/tmp/test.txt"intotablet1(name);导入......
  • MySQL隔离级别、锁、SQL优化
    一、事务隔离级别1.1事务-事务是逻辑上的一组操作,要么全部执行,要么全部不执行。-事务(Transaction)是并发控制单位,是用户定义的一个操作序列,这些操作要么都做,要么都不......
  • MySQL 合并查询join 查询出的不同列合并到一个表中
    为了求解问题时思路清晰,建议先分列查询,再将列合并到一个表中,这样相当于将复杂问题拆解为简单问题,一一解决。优点是避免所有问题混在一起,代码逻辑清晰,可迁移性强,下次遇到类......
  • MySQL基础-约束
    1. 概念约束是作用域表中字段上的规则,用于限制存储子啊表中的数据2. 目的保证数据库中数据的正确、有效性和完整性3.分类注意: 约束是作用于表中字段......
  • 图文结合带你搞懂MySQL日志之General Query Log(通用查询日志)
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:KAiTO文章来源:GreatSQL社区原创往期......
  • Mysql事务
    事务的基本概念谈到事务,首先要谈到事务的ACID机制,ACID包括原子性,一致性,隔离性和永久性.原子性,分别概述一下这四个概念原子性要么全部成功,要么全部失败一致性一致性是......
  • Mysql索引相关的知识复盘一
    索引的作用和分类索引的优缺点优点:加快数据检索速率排序分组时候,使用索引将降低资源的消耗缺点:增加了索引维护的成本降低了更新的速度提高了数据维护的成本索引会占据更多的......
  • juc 多线程 锁失效的三种情况 (多例.事务.集群)
    java自己的synchornized和lock锁都是悲观锁,默认一定有其他线程争抢并修改数据    乐观锁默认没有别的线程来抢夺,修改数据更适合读多的场景,通过version控......
  • mysql命令
    一、权限1.授权grant[权限]on[库.表]to[用户名]@[IP]例:grantSYSTEM_VARIABLES_ADMINon*.*to'opsdev'@'%'2.刷新权限flushprivile......