MySQL5.7 简述新的复制模式LOGICAL_CLOCK

我们知道,在MySQL5.6中引入了并行复制模式,当实例上有多个库的时候,可以在备库上对这几个库进行并发操作;这在基于分库的应用场景下,可以显著提升备库的复制效率,但对于我们以分表为主的场景,则效果甚微。

MySQL5.7.2是最新的开发版本release,在该版本中可以看到对复制部分做了非常大的改动,例如半同步复制的after sync, 使用Performance Schema表来监控复制线程,实验室版本的多主复制,以及本文要提到的新的多线程复制模式,MySQL里用一个新的参数来控制:slave_parallel_type,默认值为DATABASE,表示默认行为;另外一个值为LOGICAL_CLOCK,即为新增的模式

1.基本思路

由于MySQL存储引擎层已经保证了同时能够进入事务prepare/commit阶段的事务是没有冲突的(例如Innodb的行锁机制来保证事务的调度),那么可以认为在同时进入Prepare阶段的事务是可以在备库并发执行的,因为他们互相没有冲突;

LOGICAL_CLOCK是一个全局递增的64位长整型数字,主要通过它来判断哪些事务能够并发;

a.分配

在二阶段提交的binlog prepare阶段进行分配

   binlog_cache_mngr *const cache_mngr= thd_get_cache_mngr(thd);
cache= cache_mngr->get_binlog_cache_log(all);
if (cache->commit_seq_no == SEQ_UNINIT)
cache->commit_seq_no=
mysql_bin_log.commit_clock.get_timestamp();
}

 

在之前版本中binlog_prepare函数都是空函数

b.写入

LOGICAL_CLOCK只有记录到binlog中,才能为备库所用,在将每个线程cache的binlog写入时,调用函数write_commit_seq_no,每组事务的第一个事件才记录LOGICAL_CLOCK

具体的存储位置,可以阅读函数Gtid_log_event::Gtid_log_event()

c.递增

MySQL的group commit有三个阶段,FLUSH_STAGE, SYNC_STAGE, 以及COMMIT_STAGE,递增LOGICAL_CLOCK发生在第二阶段结束之后,第三阶段开始之前,这时候SYNC阶段的leader还没有释放LOCK_SYNC。

7300   mysql_bin_log.commit_clock.step();
7301   if (opt_binlog_order_commits)
7302   {
7303     if (change_stage(thd, Stage_manager::COMMIT_STAGE,
7304

 

这里并不是严格要求所有同时进入Prepare阶段的事务都在备库并发执行,因此一组提交的事务中可能存在不同的seq no

备库根据主库上记录的seq no来决定哪些事务是可以并行的,因此主库上并发线程数越多,复制效果越好,目前代码还处于开发阶段,在试玩时,发现打开gtid时,无法使用该特性,bug链接:http://bugs.mysql.com/bug.php?id=70536  包含具体的代码分析

更具体的可以阅读如下链接:

想知道具体的代码怎么实现的可以看看这个:http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/6256

开发人员博客也详细的如何配置step by step:

http://geek.rohitkalhans.com/2013/09/enhancedMTS-configuration.html

以及实现的原理

http://geek.rohitkalhans.com/2013/09/enhancedMTS-deepdive.html

时间: 2024-10-20 13:23:23

MySQL5.7 简述新的复制模式LOGICAL_CLOCK的相关文章

pgpool 主从流复制模式下的安装使用

pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件,它提供以下功能:  连接池 pgpool-II 保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名,数据库,协议版本)连接进来时重用它们.它减少了连接开销,并增加了系统的总体吞吐量.  复制 pgpool-II 可以管理多个 PostgreSQL 服务器.激活复制功能并使在2台或者更多 PostgreSQL 节点中建立一个实时备份成为可能,这样,如果

金山词霸变身IM复制模式引争议

本报讯 (记者 戈清平) 近日,金山公司新推出的金山词霸2010 Beta 3版本加入了即时通信(IM)功能,引发了业界关于复制模式的巨大争议. 从金山词霸2010 Beta 3版上看到,金山词霸2010 Beta 3的新面目已经不是一个词典了,而是一个山寨版的"QQ".当用户点击金山词霸2010 Beta 3图标,进入新版金山词霸后,用户既可以借助工具进行英语学习,还可以通过登录即时通讯的功能和朋友交流,饲养虚拟宠物词霸狗宝贝,收发邮件.通过迷你新闻页浏览资讯等.除了功能模块,新版金

[MySQL5.7.6] 新的tablespace类型–general tablespace

从5.7.6开始,增加了一种新的 tablespace模式(成为general tablespace),实际上它和共享表空间比较类似:创建一个单独的ibd,ibd中包含多个表,兼容不同的格式.general tablespace没有库的概念,因此可以在多个库里建属于同一tablespace的表.   为了支持这TABLESPACE,主要做了两部分改动:Innodb层的支持,及Server层对MDL子模块的改动.   下面我们逐一从如何使用,及具体实现的角度来介绍这一新特性   创建tablesp

慧聪并购背后,已瞄准垂直行业复制模式

[亿邦动力网讯]昨日下午,慧聪网CEO郭江及中关村在线总经理刘小东就两家公司并购的缘由及日后发展规划等问题,与亿邦动力网等媒体进行了深入沟通.郭江指出,在日后的发展中,两家公司将继续走垂直道路,在行业内做重度垂直,加快行业B2B2C的进程:同时会在各垂直行业复制中关村在线的模式,第一个对象是小家电行业.郭江告诉亿邦动力网,现阶段,在中国的各行各业中,IT.汽车和房产发展得最好,未来,中国在垂直行业方面会有很多机会.他和刘小东的结论是:中国各行业会沿着IT.汽车行业的发展轨迹走,有的行业需要三年五

创富新十大模式

创富新时代 创富新十大模式 思维革命的天娱模式 得势不饶人的盛大模式 概念为王的分众模式 "送水"赚钱的新东方模式 合伙闯天下的51Job模式 以快搏慢的顺驰模式 不畏强敌的百度模式 新鞋老路的携程模式 驾御业态变革的如家模式 争夺标准的大唐模式 "时"指企业生存的环境,是企业发展的外部变量;"势"指的是对环境的顺逆,是软实力与硬实力的结合;"术"则可以看作企业的经营技巧 <上海国资>记者林永廷 财富的聚集永远是一

国外餐饮行业的互联网公司新的创意模式

文章描述:国外互联网餐饮模式和国内相似者. 最近我为工作做了一些研究,对国外互联网餐饮模式和国内的相似模式做整理,现在择取主要内容贴在blog上. 餐饮行业的互联网公司,盈利模式有以下几种类型.软件销售模式:为餐饮企业提供管理软件和存储服务,利用互联网优势,从软件销售和软件服务中盈利.中介抽佣模式:收集.优化餐厅信息,让用户可以便利搜索和预订,从订单中抽佣.广告媒体模式:和中介抽佣模式类似,广告模式也需要收集大量的餐厅信息,提供给用户查询,但核心目的是利用用户规模,以推荐餐厅和硬广告盈利. 下文

一种新的电子商务模式诞生:O2O

文章描述:电子商务下一座金矿:O2O. B2C.C2C这些概念相信大家已经不陌生了,从1999年到现在我们已经看到,电子商务已经改变了大众的生活方式. 说到大众的生活,作为C端,更多的是在网上购买商品,然后B端或者店主把商品塞到箱子里,通过物流公司送到消费者面前. 这种电子商务的模式经历了12年的变迁使得市场不断的细分:从综合型商城(淘宝为代表)到百货商店(当当.卓越)再到垂直领域(红孩子.七彩谷)接着进入轻型品牌店(PPG.凡客),用户的选择越来越趋于个性化,不再是一家独大的局面.在苏宁.国美

曾鸣:未来五年,一个新的商业模式将诞生 | 干货

曾鸣是阿里巴巴集团学术委员会主席.湖畔大学教育长.阿里人喜欢叫他"曾教授". 基于20年来对互联网的深刻洞察,曾鸣最近提出了一个新的概念"S2b".有人说,这是对未来社会的长篇预言. 2012年,跟马云聊天的时候,我们碰撞出了 C2B 的提法,这应该是我们这个互联网时代,数据时代最重要的商业模式,也是最基本的思考方法. C2B 模式是对传统工业时代 B2C 模式最根本的颠覆,是新商业创新最重要的工作.只有当 C2B 开始大规模兴起的时候,整个商务的全链路才会彻底地被

android-Android在UI线程中启动新线程复制文件,为什么还会使界面延迟

问题描述 Android在UI线程中启动新线程复制文件,为什么还会使界面延迟 new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // 把sql文件写入sd卡,然后把路径给so String mPath=""; if(android.os.Environment.getExternalStorageState().equals("mounted