innodb复制,大事务一定会导致日志同步的延迟吗
时间:2006-11-15 来源:gladness
使用innodb时,每结束一个事务才会向binary log中写日志。如果没有记错的话,是在commit和rollback完成之前写日志,而不是commit或者rollback完成后。
因为复制过程中同步的第一步是把master的binary log同步到slave上。在使用复制(replication)时,同一个事务,只能是master上事务结束后,slave上才能开始这个事务,因为master上事务结束前还没有写到日志里去。如果事务比较大的话,需要一定的时间,就造成了slave比较明显的落后。不过要注意,此处的落后是指数据同步的落后,而非指日志同步的落后,因为MYSQL4点几以后,日志同步和数据同步(把日志应用到数据库中)是两个独立的线程。就是为了让数据同步不拖累日志同步。
数据同步的落后到不是我担心的地方,我关注的是如果master宕机,slave与master的差异会是怎样的。
如果master在事务结束前宕机,这样的事务在master上是未完成的事务,即使master重启(比如断电后重启),这些数据也会在自动恢复过程中回滚。而这些SQL并不会记录在binary log中,因此slave也得不到。
如果master上的事务完成了,并且也记到了日志文件中,而此时宕机,slave有可能还未来得及读取新的日志,造成master与slave的数据不一致。当然了,如果master只是掉电,能够重新启动,启动后很快slave就会同步了。
从上述分析来看,大事务会导致slave与master在数据同步上会有一定的延迟,并不一定会导致日志同步的明显延迟。那么在什么情况下会出现日志不同步,还有待测试。
因为复制过程中同步的第一步是把master的binary log同步到slave上。在使用复制(replication)时,同一个事务,只能是master上事务结束后,slave上才能开始这个事务,因为master上事务结束前还没有写到日志里去。如果事务比较大的话,需要一定的时间,就造成了slave比较明显的落后。不过要注意,此处的落后是指数据同步的落后,而非指日志同步的落后,因为MYSQL4点几以后,日志同步和数据同步(把日志应用到数据库中)是两个独立的线程。就是为了让数据同步不拖累日志同步。
数据同步的落后到不是我担心的地方,我关注的是如果master宕机,slave与master的差异会是怎样的。
如果master在事务结束前宕机,这样的事务在master上是未完成的事务,即使master重启(比如断电后重启),这些数据也会在自动恢复过程中回滚。而这些SQL并不会记录在binary log中,因此slave也得不到。
如果master上的事务完成了,并且也记到了日志文件中,而此时宕机,slave有可能还未来得及读取新的日志,造成master与slave的数据不一致。当然了,如果master只是掉电,能够重新启动,启动后很快slave就会同步了。
从上述分析来看,大事务会导致slave与master在数据同步上会有一定的延迟,并不一定会导致日志同步的明显延迟。那么在什么情况下会出现日志不同步,还有待测试。
相关阅读 更多 +