真实装上半同步复制插件,对比replica在线和掉线两种情况下commit延迟的真实差异,验证超时自动降级机制是不是真的会生效。
代码-- source INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so'; SET GLOBAL rpl_semi_sync_source_enabled = 1; SET GLOBAL rpl_semi_sync_source_timeout = 2000; -- 2秒超时 -- replica INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so'; SET GLOBAL rpl_semi_sync_replica_enabled = 1;
Rpl_semi_sync_source_status: ON Rpl_semi_sync_source_clients: 1 真实一次INSERT的commit耗时:605 微秒
半同步真实要求source在返回COMMIT成功之前,至少等到一个replica真实确认"我已经收到这个事务的binlog"(不要求已经应用完,只要求已经写进relay log)——本机这个本地网络环境下,这个真实的确认往返只花了605微秒,几乎感觉不到额外开销。
代码-- replica: STOP REPLICA;(模拟真实掉线) -- source: 真实再提交一次 INSERT INTO shop.orders (item, qty) VALUES ('grape', 4);
真实这次commit耗时:2005192 微秒(约2.005秒) ← 精确对应配置的rpl_semi_sync_source_timeout=2000毫秒 超时之后: Rpl_semi_sync_source_status: OFF ← 真实自动降级回了异步复制
每一步都是本文上面用真实半同步复制环境跑出来的原始结果。
rpl_semi_sync_source_timeout + 真实的commit耗时测量