MarriDB/MySQL的binlog group commit技术介绍

本文探讨了操作系统页面缓存机制及其对数据库持久化的影响,特别是在MySQL中如何通过binlog group commit技术减少fsync调用次数,从而提高事务提交效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,操作系统使用页面缓存机制来填补内存访问速度和磁盘访问速度之间的差距。通常情况下,对磁盘文件的写都会先写入到页面缓存中,
然后由操作系统来决定何时将修改过的脏页刷新到磁盘上。如果想确保修改已经持久写到了磁盘,必须调用fsync或fdatasync。在关系数据库中,
为了满足ACID中的持久化属性,也就是说事务提交并成功返回给客户端之后,必须保证该事务的所有修改不能丢。无论是在数据库程序崩溃的情况下,
还是在数据库所在的服务器发生宕机或断电的情况下,都必须保证数据不能丢,这就要求数据库在事务提交过程中调用fsync或fdatasync将数据持久化
到磁盘。fsync是一个昂贵的系统调用,对于普通的磁盘,每秒只能完成几百次的fsync操作,很明显,fsync将会限制每秒提交的事务数,成为关系
数据库的瓶颈。

对于MarriDB/MySQL来说,这种情况变得更加糟糕。在开启binlog的情况下,为了保证主库和从库之间数据的一致性,MarriDB/MySQL使用了事务的
两阶段提交协议。在这种情况下,为了满足数据的持久化需求,一个事务的提交最多会导致3次fsync操作。

为了提高MarriDB/MySQL在开启binlog的情况下单位时间内的事务提交数,就必须减少每个事务提交过程中导致的fsync的调用次数。MarriDB从5.3版本开始,
引入了binlog group commit技术来解决这个问题。MySQL从5.6版本开始也加入了binlog group commit技术。

binlog group commit的基本思想是多个并发提交的事务之间共用一次fsync操作来实现事务对binlog修改的持久化。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15498/viewspace-2119935/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15498/viewspace-2119935/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值