本文简单讲解了MySQL中redolog的写入机制,有助于深入理解MySQL中数据一致性和持久化的实现,同时还可以学习如何使用redolog 调整 MySQL IOPS。
MySQL更新数据时,首先更新数据,然后生成redolog。此时redolog处于prepare状态,然后保存binlog,然后提交事务。此时redolog转为commit状态,写入完成。
这一步在之前的文章中已经详细介绍过。如果您不明白,请继续阅读。 「原创」讲讲从RedoLog和BinLog中执行Update语句 2022-06-02 事务未提交时,log无法直接写入磁盘上的ib-logfile-n文件(重做日志磁盘中的文件名),因此需要占用一块内存需要临时存储,因此该页需要相应的缓冲区——redolog buffer。 回顾整个redolog写入过程,在prepare阶段,log 可能会被存储在redolog buffer中。事务提交后,日志会保存到binlog中。 最后将commit事务保存到binlog中。这个阶段其实有两种可能: 1。日志从缓冲区写入文件系统的页缓存。在适当的时候,系统会调用fsync将page cache中的redolog数据持久化到磁盘(保存到ib-logfile-n文件中) 2。日志直接从缓冲区持久化到磁盘。 tips:将日志写入重做日志缓冲区非常快,将日志写入页缓存也更快,但持久化到磁盘会慢很多。 redolog 的 fsync 策略 注意,当redolog写入或者直接执行fsync时,redolog缓冲区中的所有内容都会被刷新。 事务提交时执行fsync 当三个事务ABC同时进行时,如果事务A已提交,事务B尚未结束,而C已准备好提交,则BC会跟随事务A持久化到磁盘。 定时任务每秒会将redo log buffer中的日志写入到文件系统中的page cache中,然后调用fsync进行持久化 当redo log buffer占用的空间即将达到innodb_log_buffer_size的一半时,后台线程会主动写入磁盘。 在阶段 2、3 和 5 中,可以将未提交的事务刷新到磁盘。 redo log的写入策略可以通过参数innodb_flush_log_at_trx_commit配置。 设置为 0:重做日志保留在重做日志缓冲区中,并依赖计划任务每秒刷新到磁盘(不推荐),无论事务提交如何。 设置为1(默认):表示每次提交事务时都会将重做日志持久化到磁盘(最安全) 设置为2:表示每次提交事务时,重做日志每秒只写入页缓存并刷新到磁盘一次(速度快,但会丢失1s的数据,甚至更多, 1秒并不严格) 为了方便大家深入研究,我在下面贴出了官网对这个参数的解释。 相关推荐 【第251期】面试官:谈谈你对 【第228期】高频访谈:Jav 【第228期】高频访谈:Jav 我的Win10电脑蓝牙耳机无法 如何设置Win10允许其他设备 如何将指定文件夹添加到Ever 如何将Win11任务栏置顶 如何快速获得主流在线视频下载地 Active Director win7搜索文件不全怎么办_解 windows7忘记开机密码了 完整版三维地质建模软件系统 Linux下快速排序的实用流程 【第138期】面试官:聊聊It 【第173期】面试官:谈谈单点 【第173期】面试官:谈谈实现 合并多个js和css文件的方法 HTML外部引用的CSS文件不 css相对定位和绝对定位有什么 JVM-如何判断对象是否存活以 Java垃圾回收机制方法、对象 Java虚拟机对象生存算法 贾跃亭:FF品牌绝不会推出50 Apple ID充值教程
这一步在之前的文章中已经详细介绍过。如果您不明白,请继续阅读。
「原创」讲讲从RedoLog和BinLog中执行Update语句
2022-06-02
事务未提交时,log无法直接写入磁盘上的ib-logfile-n文件(重做日志磁盘中的文件名),因此需要占用一块内存需要临时存储,因此该页需要相应的缓冲区——redolog buffer。 回顾整个redolog写入过程,在prepare阶段,log 可能会被存储在redolog buffer中。事务提交后,日志会保存到binlog中。 最后将commit事务保存到binlog中。这个阶段其实有两种可能: 1。日志从缓冲区写入文件系统的页缓存。在适当的时候,系统会调用fsync将page cache中的redolog数据持久化到磁盘(保存到ib-logfile-n文件中) 2。日志直接从缓冲区持久化到磁盘。 tips:将日志写入重做日志缓冲区非常快,将日志写入页缓存也更快,但持久化到磁盘会慢很多。 redolog 的 fsync 策略 注意,当redolog写入或者直接执行fsync时,redolog缓冲区中的所有内容都会被刷新。 事务提交时执行fsync 当三个事务ABC同时进行时,如果事务A已提交,事务B尚未结束,而C已准备好提交,则BC会跟随事务A持久化到磁盘。 定时任务每秒会将redo log buffer中的日志写入到文件系统中的page cache中,然后调用fsync进行持久化 当redo log buffer占用的空间即将达到innodb_log_buffer_size的一半时,后台线程会主动写入磁盘。 在阶段 2、3 和 5 中,可以将未提交的事务刷新到磁盘。 redo log的写入策略可以通过参数innodb_flush_log_at_trx_commit配置。 设置为 0:重做日志保留在重做日志缓冲区中,并依赖计划任务每秒刷新到磁盘(不推荐),无论事务提交如何。 设置为1(默认):表示每次提交事务时都会将重做日志持久化到磁盘(最安全) 设置为2:表示每次提交事务时,重做日志每秒只写入页缓存并刷新到磁盘一次(速度快,但会丢失1s的数据,甚至更多, 1秒并不严格) 为了方便大家深入研究,我在下面贴出了官网对这个参数的解释。 相关推荐 【第251期】面试官:谈谈你对 【第228期】高频访谈:Jav 【第228期】高频访谈:Jav 我的Win10电脑蓝牙耳机无法 如何设置Win10允许其他设备 如何将指定文件夹添加到Ever 如何将Win11任务栏置顶 如何快速获得主流在线视频下载地 Active Director win7搜索文件不全怎么办_解 windows7忘记开机密码了 完整版三维地质建模软件系统 Linux下快速排序的实用流程 【第138期】面试官:聊聊It 【第173期】面试官:谈谈单点 【第173期】面试官:谈谈实现 合并多个js和css文件的方法 HTML外部引用的CSS文件不 css相对定位和绝对定位有什么 JVM-如何判断对象是否存活以 Java垃圾回收机制方法、对象 Java虚拟机对象生存算法 贾跃亭:FF品牌绝不会推出50 Apple ID充值教程
事务未提交时,log无法直接写入磁盘上的ib-logfile-n文件(重做日志磁盘中的文件名),因此需要占用一块内存需要临时存储,因此该页需要相应的缓冲区——redolog buffer。
回顾整个redolog写入过程,在prepare阶段,log 可能会被存储在redolog buffer中。事务提交后,日志会保存到binlog中。
最后将commit事务保存到binlog中。这个阶段其实有两种可能: 1。日志从缓冲区写入文件系统的页缓存。在适当的时候,系统会调用fsync将page cache中的redolog数据持久化到磁盘(保存到ib-logfile-n文件中) 2。日志直接从缓冲区持久化到磁盘。 tips:将日志写入重做日志缓冲区非常快,将日志写入页缓存也更快,但持久化到磁盘会慢很多。 redolog 的 fsync 策略 注意,当redolog写入或者直接执行fsync时,redolog缓冲区中的所有内容都会被刷新。 事务提交时执行fsync 当三个事务ABC同时进行时,如果事务A已提交,事务B尚未结束,而C已准备好提交,则BC会跟随事务A持久化到磁盘。 定时任务每秒会将redo log buffer中的日志写入到文件系统中的page cache中,然后调用fsync进行持久化 当redo log buffer占用的空间即将达到innodb_log_buffer_size的一半时,后台线程会主动写入磁盘。 在阶段 2、3 和 5 中,可以将未提交的事务刷新到磁盘。 redo log的写入策略可以通过参数innodb_flush_log_at_trx_commit配置。 设置为 0:重做日志保留在重做日志缓冲区中,并依赖计划任务每秒刷新到磁盘(不推荐),无论事务提交如何。 设置为1(默认):表示每次提交事务时都会将重做日志持久化到磁盘(最安全) 设置为2:表示每次提交事务时,重做日志每秒只写入页缓存并刷新到磁盘一次(速度快,但会丢失1s的数据,甚至更多, 1秒并不严格) 为了方便大家深入研究,我在下面贴出了官网对这个参数的解释。 相关推荐 【第251期】面试官:谈谈你对 【第228期】高频访谈:Jav 【第228期】高频访谈:Jav 我的Win10电脑蓝牙耳机无法 如何设置Win10允许其他设备 如何将指定文件夹添加到Ever 如何将Win11任务栏置顶 如何快速获得主流在线视频下载地 Active Director win7搜索文件不全怎么办_解 windows7忘记开机密码了 完整版三维地质建模软件系统 Linux下快速排序的实用流程 【第138期】面试官:聊聊It 【第173期】面试官:谈谈单点 【第173期】面试官:谈谈实现 合并多个js和css文件的方法 HTML外部引用的CSS文件不 css相对定位和绝对定位有什么 JVM-如何判断对象是否存活以 Java垃圾回收机制方法、对象 Java虚拟机对象生存算法 贾跃亭:FF品牌绝不会推出50 Apple ID充值教程
最后将commit事务保存到binlog中。这个阶段其实有两种可能:
1。日志从缓冲区写入文件系统的页缓存。在适当的时候,系统会调用fsync将page cache中的redolog数据持久化到磁盘(保存到ib-logfile-n文件中)
2。日志直接从缓冲区持久化到磁盘。 tips:将日志写入重做日志缓冲区非常快,将日志写入页缓存也更快,但持久化到磁盘会慢很多。 redolog 的 fsync 策略 注意,当redolog写入或者直接执行fsync时,redolog缓冲区中的所有内容都会被刷新。 事务提交时执行fsync 当三个事务ABC同时进行时,如果事务A已提交,事务B尚未结束,而C已准备好提交,则BC会跟随事务A持久化到磁盘。 定时任务每秒会将redo log buffer中的日志写入到文件系统中的page cache中,然后调用fsync进行持久化 当redo log buffer占用的空间即将达到innodb_log_buffer_size的一半时,后台线程会主动写入磁盘。 在阶段 2、3 和 5 中,可以将未提交的事务刷新到磁盘。 redo log的写入策略可以通过参数innodb_flush_log_at_trx_commit配置。 设置为 0:重做日志保留在重做日志缓冲区中,并依赖计划任务每秒刷新到磁盘(不推荐),无论事务提交如何。 设置为1(默认):表示每次提交事务时都会将重做日志持久化到磁盘(最安全) 设置为2:表示每次提交事务时,重做日志每秒只写入页缓存并刷新到磁盘一次(速度快,但会丢失1s的数据,甚至更多, 1秒并不严格) 为了方便大家深入研究,我在下面贴出了官网对这个参数的解释。 相关推荐 【第251期】面试官:谈谈你对 【第228期】高频访谈:Jav 【第228期】高频访谈:Jav 我的Win10电脑蓝牙耳机无法 如何设置Win10允许其他设备 如何将指定文件夹添加到Ever 如何将Win11任务栏置顶 如何快速获得主流在线视频下载地 Active Director win7搜索文件不全怎么办_解 windows7忘记开机密码了 完整版三维地质建模软件系统 Linux下快速排序的实用流程 【第138期】面试官:聊聊It 【第173期】面试官:谈谈单点 【第173期】面试官:谈谈实现 合并多个js和css文件的方法 HTML外部引用的CSS文件不 css相对定位和绝对定位有什么 JVM-如何判断对象是否存活以 Java垃圾回收机制方法、对象 Java虚拟机对象生存算法 贾跃亭:FF品牌绝不会推出50 Apple ID充值教程
2。日志直接从缓冲区持久化到磁盘。
tips:将日志写入重做日志缓冲区非常快,将日志写入页缓存也更快,但持久化到磁盘会慢很多。
注意,当redolog写入或者直接执行fsync时,redolog缓冲区中的所有内容都会被刷新。
在阶段 2、3 和 5 中,可以将未提交的事务刷新到磁盘。
redo log的写入策略可以通过参数innodb_flush_log_at_trx_commit配置。
innodb_flush_log_at_trx_commit