前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql-innodb日志写入时机

Mysql-innodb日志写入时机

作者头像
执生
发布2020-11-27 14:45:33
1.9K0
发布2020-11-27 14:45:33
举报
文章被收录于专栏:立权的博客立权的博客

总所周知 , innodb 的日志是二阶段提交的,redolog 先在 prepare 阶段写入, binlog 再写入,最后 redolog commit

这其中 redolog 的刷入时机是由 innodb_flush_log_at_trx_commit 参数控制,有提交时不刷如,刷入操作系统缓存,落盘 3种操作。

binlog 的刷入时机是由 sync_binlog 参数控制的,设置为 N ,表示每 N 次事务提交 会刷入一次硬盘, 如果设置为 0 只会写入 os cache

具体的 ,innodb_flush_log_at_trx_commit 参数是在 prepare 控制 这个阶段写入的内容怎么刷硬盘

而 sync_binlog 参数控制的 就是 binlog 在 redolog 之后 的 写入

值得注意的是, redolog 在 commit 阶段是不会刷入硬盘,也不会写入 os cache,知识单纯写入内存。

因为 如果 binlog 完整, redolog prepare 阶段写入完成,则可以直接把事务提交掉,就算没有 commit 阶段的记录也行。

redolog 是每执行一条语句都会写入到 redolog buffer。在某个事务提交的时候一次性组提交,把buffer 所有的内容都刷盘。多个事务共享的是 redolog buffer

binlog 是每个线程都有自己的 binlog buffer, 线程每执行一条语句都会往这里写,当提交的时候再把 自己的 binlog buffer 写到 binlog 文件中。多个事务 共享的 是 binlog 文件

另外,innodb 的 redolog 提供了 组提交机制(指的是共享的 redo log buffer 成组写入)。假如有三个 事务,t1 , t2 , t3 ,同时提交,假设 t1 先进入到 刷硬盘的时机,他发现 buffer 中还有 t2 和 t3 的日志,会同时帮忙刷入到硬盘中(假如控制的参数是1的话)。称为组提交。其实 t2,t3 就算不提交,也会被 t1 顺带落盘,很奇怪?为什么没提交的事务的 redo log 也能落盘?其实还有 undo log , 从数据页可以找到 一条与之相关的 undo log 链。

记录了 数据页做出的变化。而 undo log 上记录了 事务的 id,可以找到对应事务。当崩溃恢复,机器重启时,虽然应用了硬盘中的未提交事务的 redolog,但是可以从 redolog 或者 其他地方找到 未提交的 事务,然后找到 对应的 undo log,进行回滚。

另外还有 binlog 的组提(binlog 的组提交是 多个线程 写入 binlog 的 os cache,某个线程 sync 把其他 线程写入 os cache 的内容 成组刷盘)。可以通过

binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 两个参数 控制 binlog 刷盘的延后,使更多事务同时 fsync

前者代表一个 binlog 提交延迟多久后 才 fsync,后一个代表一个 binlog 提交之后经过再多少个 binlog 提交才 fsync

(后者和 sync_binlog 不矛盾, t1, t2, t3 依次提交,假如 sync_binlog = 1 , binlog_group_commit_sync_no_delay_count = 2,那么 t1 暂时不 fsync,t2,t3 提交之后再 fsync, t2,t3 已经刷了盘

已经不能再做为起点计数了,如果再来各 t4,则从t4 开始算起)

实际的提交流程流程 : redolog prepare 阶段写入 os cache - binlog 写入os cache - redolog 的 fsync 刷盘阶段(innodb_flush_log_at_trx_commit 控制是否刷盘)- binlog 的fsync 刷盘 - redolog 的commit 写入 buffer。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档