IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> InnoDB之redo日志 -> 正文阅读

[大数据]InnoDB之redo日志

1. redu log日志

1.1什么是redo log

  • 它是InnoDB存储引擎的日志,利用redo log能够实现事务持久化。
  • 它是物理逻辑日志,记录了数据页的物理修改,而不是记录某个sql逻辑语句。
  • 内存中有一个redo log buffer,用于作为redo log日志的缓冲池。大小设置8M就够了。

1.2 执行过程

  1. 先将数据页读入内存缓冲池

  2. ?修改内存数据页

  3. 将redo log日志写入内存的redo log buffer中

  4. 将内存的redo log buffer中的数据写入redo日志文件,(顺序写入,IO性能高)

  5. 事务完成提交。

  6. 后续mysql数据库找机会将脏页刷盘到磁盘的数据页中。

1.3 什么时候刷新redo log buffer

  • master thread每秒定时刷新
  • redo log buffer 使用大于二分之一会进行刷新
  • 事务提交时自动刷新(默认innodb_flush_log_at_trx_commit=1)
    • innodb_flush_log_at_trx_commit=0 :提交事务时将redo日志写入内存redo log buffer中。(这样可能会丢失1秒中的数据)
    • innodb_flush_log_at_trx_commit=1 :提交事务时将redo日志写入redo log日志文件中(fsync函数:写入磁盘文件。)
    • innodb_flush_log_at_trx_commit=2?:提交事务时将redo日志写入操作系统缓存中,这样如果数据库宕机但是操作系统没重启的话,数据页不会丢失。(fwrite函数:写入操作系统缓存,不一定写入磁盘文件)

1.4 补充

  • 物理日志:记录每个页的变化
  • 逻辑日志:记录类似于sql语句
  • 物理逻辑日志:根据数据页进行记录,但是记录的内容又是逻辑的。
    • 记录哪次(sequence)如何操作(update,insert)哪页(page)的哪行(row)

1.5 binlog日志与redo log日志对比

  • binlog日志是逻辑日志,记录的是类似sql语句,redo log日志是物理(逻辑)日志,记录的是对数据页的修改。
  • binlog日志在事务提交时才会一次性写入磁盘,而redo log在事务开始时,就开始写入内存的redo log buffer中(这个缓冲区每隔一秒自动刷新到磁盘),在提交的时候会将这些更新刷新到磁盘。
    • 举个例子,一个事务里面,有多条更新语句。每执行一条更新语句,就会向redo log buffer中写入redo日志。而执行到commmit时,才会向二进制日志文件写入二进制日志。

1.6 binlog与redolog写入磁盘顺序

  1. 开启事务
  2. 修改数据:此时会触发向内存中redo log buffer写入日志(每隔一秒会自动刷新到磁盘)
  3. 提交事务:会触发向redo log 磁盘文件写入日志,再触发向二进制磁盘文件写入日志

1.7 事务提交时(commit)如何保证redo日志和binlog日志都写入了磁盘

  1. innodb存储引擎先向磁盘中redo日志文件中写入一个prepare redo log
  2. 然后向磁盘中二进制文件写入binlog
  3. 最后innodb存储引擎再向磁盘中redo日志文件中写入一个commit redo log
  • 如果步骤1成功,步骤2与3失败,则回滚事务。
  • 如果步骤1和步骤2成功,则重新执行步骤三即可?

2. undo log

2.1 介绍

  • undo log属于逻辑日志,记录的是一个变化的过程
  • 在数据库事务开始之前,会将要修改的记录存放到Undo日志里,当事务回滚时或者数据库奔溃时,可以利用undo日志,撤销未提交事务对数据库产生的影响
  • undo的销毁:在事务提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log 放入到删除列表,后面会通过后台线程purge thread进行回收处理。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:17:51  更:2021-10-06 12:19:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:46:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码