MYSQL BUG 3:slave lag(延迟)不断增加



没有主键/唯一索引的表上做影响行数较多的DML,用行复制,会导致slave lag(Seconds_Behind_Master)不断增加
原因:slave的sql thread在做执行计划的时候只会用主键和唯一索引作为候选可用索引

重现方式
# 表结构
CREATE TABLE `t2` (
  `id` bigint(20) NOT NULL,
  `age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 初始化数据
插入15w行

# 更新:命中5W行
UPDATE `t2` SET  `age` = CEIL(RAND()*1000) WHERE id<=50000;

# 结果
slave上的Seconds_Behind_Master值一直增加到N(原因)

# 源码
Log_event.cc
bool slave_execute_deferred_events(THD *thd)
{
  bool res= false;
  Relay_log_info *rli= thd->rli_slave;


  DBUG_ASSERT(rli && (!rli->deferred_events_collecting || rli->deferred_events));


  if (!rli->deferred_events_collecting || rli->deferred_events->is_empty())
    return res;


  res= rli->deferred_events->execute(rli);


  return res;
}


请使用浏览器的分享功能分享到微信等