首页 > 数据库 >Mysql的事务原理

Mysql的事务原理

时间:2023-01-05 00:55:54浏览次数:39  
标签:事务 log 记录 undo 磁盘 Mysql 原理 日志

一、持久性

  依靠的是redo log,重做日志,记录的是事务提交时数据也的物理修改,是用来实现事务的持久性。

该日志文件由两部分组成,重做日志缓冲,(redo log buffer) 和重做日志文件(redo log file),前者是在内存中,后者是在磁盘中,当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘发生错误时,进行诗句恢复使用。

    *脏页:用户在执行增删改时,操作的是内存结构中的Buffer pool中的页, MYSQL会在一定时间内将内存中的页刷新到磁盘来实现持久性,已经被修改但是还没刷新到磁盘中的页叫脏页。

    *WAL:这种处理用到了WAL机制,先写日志,过一段时间再将内存缓冲区刷新到磁盘中

 

 

 

 二、原子性

  依靠的是undo log,回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MV6C(多版本并发控制)。

  undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete-条记录时,undo log中会记录-条对应的insert记录,反之亦然,当update- 条记录时,它记录-条对应相反的update记录。当执行rollback时, 就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
  Undo log销毁: undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。
  Undo log存储: undo log采用段的方式进行管理和记录,存放在前面介绍的rollback segment回滚段中,内部包含1024个undo log segment。

标签:事务,log,记录,undo,磁盘,Mysql,原理,日志
From: https://www.cnblogs.com/tyleaf/p/17026422.html

相关文章

  • MYSQL中MVCC是什么?
    基本概念MVCC:全称Multi-VersionConcurrencyControl,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了--个非阻塞读功......
  • MySQL中limit的用法
      mySql提供了limit ,主要用于提取前几条或者中间某几行数据。select*fromtablelimitm,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1条开始,取n......
  • 230104_50_RPC底层原理
    上述Stud中,有一个参数,writeInt(123),传的都是123这个具体的值,如果接口中暴露了其他的方法,其他方法需要出入的参数不同,就需要对此进行进一步优化。要实现,无论有多少个方法,都用......
  • golang linux/windows下根据日期自动备份,恢复mysql数据表
    由于shell不熟,所以用golang进行自动化备份mysql备份某个数据库下指定日期的表。比如’tb_20221210'这样的表名1packagemain23import(4"fmt"5......
  • Redis-03 Redis事务
    需要特别注意,Redis的命令是原子性的,而Redis的事务是非原子性的事务相关命令MULTI命令开启事务命令,Redis将操作命令逐个放到队列中,根据EXEC命令来原子化执行命令EXE......
  • 二层转发原理
    一、什么是二层转发二层转发就是基于MAC地址进行数据包转发。1.二层指的就是网络七层模型中的数据链路层2.数据链路层传输的数据单元叫–帧以太帧格式前两个字......
  • MySQL数据库更改密码
    当我们忘记本机MySQL登陆密码时1:首先打开MySQL的安装目录到bin(包含MySQL.exe和mysqld.exe的文件夹)   2:复制文件路径3:使用管理员打开cmd 4:输入mysqld--skip-......
  • git基本原理和各种骚操作
    Git简单介绍Git是一个分布式版本控制软件,最初由LinusTorvalds创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。Git工作流程以及各个区域   ......
  • mysql count(*) count(1)的区别
    COUNT(字段名)和COUNT(*)的查询结果有什么不同?COUNT(1)和COUNT(*)之间的效率哪个更高?你知道答案吗?很多人都认为COUNT(1)比COUNT(*)效率高,真的是这样吗?  1、认识COUN......
  • mysql 索引相关知识
    相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。因为索引是MySQL中比较重点的知识,相信很多人都有一定的了解,尤其是在面试中出现的频率......