MYSQL数据库是我们比较常见的数据库,因此关于MYSQL数据库在使用过程中的问题提问的人也非常多。那么MYSQL中binlog有哪些常见的问题?这些问题的解决方案是什么?下文是关于MYSQL数据库中通过示例代码详细介绍了一些binlog优化的思维问题,这些示例代码对于每个人的学习或工作都具有一定的参考学习价值。
首先说一下问题:
问题1:如何解决事务提交时flush redo log带来的性能损失
WAL是实现事务持久性(D)的一个常用技术,基本原理是将事务的修改记录redo log。redo
log顺序追加写入。事务提交时,只需要保证事务的redo log落盘即可,通过redo
log的顺序写代替页面的随机写提升数据库系统的性能。但是,该方案必须要求每个事务提交时都将其生成的redo log进行一次刷盘,效率不高。
问题2:binlog和引擎层事务提交的顺序问题
对于单个事务而言,日志写入顺序是先redo
log再binlog,只要维持该顺序即可维持正确性。但对于一个高并发的数据库系统而言,每时每刻可能都会存在众多并发执行的事务。我们还需要通过一定的手段来维护Server层binlog和引擎层事务提交的顺序一致性。
维护这种顺序一致性其实是为了保证备份工具Xtrabackup的正确性。
当 binlog 作为协调者,如果其中记录的事务顺序和存储引擎层记录的顺序不一样的话,备份工具(Innodb Hot
Backup)拿到备份集的位点可能会存在空洞。因为备份工具会拷贝 redo 日志,在 redo 的头部会记录最后一个提交的事务对应的 binlog
<