阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL InnoDB 日志管理机制中的MTR和日志刷盘

134次阅读
没有评论

共计 990 个字符,预计需要花费 3 分钟才能阅读完成。

1.MTR(mini-transaction) 

在 MySQL 的 InnoDB 日志管理机制中,有一个很重要的概念就是 MTR。MTR 是 InnoDB 存储擎中一个很重要的用来保证物理写的完整性和持久性的机制。

先看下 MTR 在 MysQL 架构中的位置。

MySQL InnoDB 日志管理机制中的 MTR 和日志刷盘

MTR 是上面的逻辑层与下面物理层的交互窗口,同时也是用来保证下层物理数据正确性、完整性及持久性的机制。

2. 日志刷盘的触发条件

触发条件 描述
时间 线程默认每秒刷新一次。
空间 Log Buffer 空间用完了
Check PointcheckPoint 的时机较多,既有空间触发也有时间触发。主要分为 

Sharp Checkpoint 和 Fuzzy Checkpoint

强一致事务要求 根据参数 innodb_flush_log_at_trx_commit 值不同,产生不同的行为。

 

3. innodb_flush_log_at_trx_commit 简单介绍

MySQL InnoDB 日志管理机制中的 MTR 和日志刷盘

 

参数解释

(部分内容个人理解,特别是我将 log file 分为 os cache 和 磁盘 2 种,更多内容还要求证。)

0:每次事务提交时,根本不会去刷日志缓冲区。log buffer 将每秒一次地写入到 OS cache 的 log file 中,并且 log file 的 flush(刷到磁盘) 上的 Log Files 操作同时进行。

1:每次事务提交时 MySQL 都会把 log buffer 的数据写入到 OS cache 的 log file,并且 flush(刷到磁盘)Log Files 中去,该模式为系统默认。

2:每次事务提交时 MySQL 都会把 log buffer 的数据写入到 OS cache 的 log file,但是 flush(刷到磁盘)Log Files 的操作并不会同时进行。该模式下,MySQL 会每秒执行一次 flush(刷到磁盘) 操作。

注意事项

当设置为 0,该模式速度最快,但不太安全,这种设置是最危险的。如果此时运气不好,mysqld 进程的崩溃,那么对数据库最新的更新都会丢失,即使事务已经提交了。但一般丢失的数据都是在一秒内产生的。

当设置为 1,该模式是最安全的,但也是最慢的一种方式。在 mysqld 服务崩溃或者服务器主机 crash 的情况下,binary log 只有可能丢失最多一个语句或者一个事务。
当设置为 2,该模式速度较快,也比 0 安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

 此参数可根据业务的可靠性要求进行调整,参数的选择对性能影响较大。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计990字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中