补测了一个复杂场景,即数据库存在流复制的情况下,普通事务提交和两阶段提交的性能差异是不是很大呢?
Prepare Transaction的处理只会发生在主库上,从库根本就看不到两阶段的事务,理论上没有影响的。
同步流复制
首先,同步流复制情况下,仅测试20个并发,每个Batch为10的情况。
普通事务耗时,2153393ms;两阶段耗时,2365860ms
相对于没有同步流复制的情况,耗时都有增加,这个是预期内的。
有无同步流复制的达成率,普通事务耗时增加8%,两阶段耗时增加13%。
同步流复制情况下,普通事务对比两阶段的达成率为91%,达成率略有下降(无流复制情况下,达成率可以达到96%)。
异步流复制
再测试一下异步流复制的情况下,情况是否有所不同。
同样仅测试一个场景(测试20个并发,每个Batch为10)
普通事务耗时,2044819ms;两阶段耗时,2133728ms。
有无同步流复制的达成率,普通事务耗时增加2.6%,两阶段耗时增加2.6%。
异步流复制情况下,普通事务对比两阶段的达成率为96%,达成率完全一致。
结论
同步流复制,对普通事务和两阶段事务的影响略有不同,同步流复制对两阶段事务的影响略大(需要抓一下流量包,看看具体有什么不同,因为理论上是一致的才对)
而异步流复制,对普通事务和两阶段事务的影响是一样的。
网友评论