MySQL5.7的组提交与并行复制
2018-06-17 23:48:58来源:未知 阅读 ()
mysql> show global variables like '%group_commit%'; +-----------------------------------------+-------+ | Variable_name | Value | +-----------------------------------------+-------+ | binlog_group_commit_sync_delay | 0 | | binlog_group_commit_sync_no_delay_count | 0 | +-----------------------------------------+-------+ 2 rows in set (0.00 sec)
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000005 |grep last_committed #170607 11:24:57 server id 353306 end_log_pos 876350 CRC32 0x92093332 GTID last_committed=654 sequence_number=655 #170607 11:24:58 server id 353306 end_log_pos 880406 CRC32 0x344fdf71 GTID last_committed=655 sequence_number=656 #170607 11:24:58 server id 353306 end_log_pos 888700 CRC32 0x4ba2b05b GTID last_committed=656 sequence_number=657 #170607 11:24:58 server id 353306 end_log_pos 890675 CRC32 0xf8a8ad64 GTID last_committed=657 sequence_number=658 #170607 11:24:58 server id 353306 end_log_pos 892770 CRC32 0x127f9cdd GTID last_committed=658 sequence_number=659 #170607 11:24:58 server id 353306 end_log_pos 894757 CRC32 0x518abd93 GTID last_committed=659 sequence_number=660 #170607 11:37:46 server id 353306 end_log_pos 895620 CRC32 0x99174f95 GTID last_committed=660 sequence_number=661 #170607 11:37:51 server id 353306 end_log_pos 895897 CRC32 0xb4ffc341 GTID last_committed=661 sequence_number=662 #170607 11:38:00 server id 353306 end_log_pos 896174 CRC32 0x6bcbc492 GTID last_committed=662 sequence_number=663 #170607 11:39:40 server id 353306 end_log_pos 896365 CRC32 0x1fe16c7c GTID last_committed=663 sequence_number=664
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000008|grep last_commit #170609 10:11:07 server id 353306 end_log_pos 75629 CRC32 0xd54f2604 GTID last_committed=269 sequence_number=270 #170609 10:13:03 server id 353306 end_log_pos 75912 CRC32 0x43675b14 GTID last_committed=270 sequence_number=271 #170609 10:13:24 server id 353306 end_log_pos 76195 CRC32 0x4f843438 GTID last_committed=270 sequence_number=272
#MTS slave-parallel-type=LOGICAL_CLOCK slave-parallel-workers=8 #太多的线程会增加线程间同步的开销,建议4-8个slave线程 master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_recovery=ON slave-parallel-type有两个之,DATABASE和LOGICAL_CLOCK,DATABASE: 默认值,兼容5.6以schema维度的并行复制, LOGICAL_CLOCK: MySQL 5.7基于组提交的并行复制机制。
综合来说,MySQL5.7的并行复制是基于group commit和从库以下参数的配置:mysql> show variables like '%slave_para%';
+------------------------+---------------+ | Variable_name | Value | +------------------------+---------------+ | slave_parallel_type | LOGICAL_CLOCK | | slave_parallel_workers | 8 | +------------------------+---------------+ 2 rows in set (0.01 sec)
要想使用MySQL5.7的并行复制,必须首先主库必须标记某几个事物是同时提交,也就是last_commited的值是相同的擦灰在从库上并行回放,然后在从库设置线程数和相关的方式。我们上面设置的是8,再从库就能看到
mysql> show processlist; +----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+ | 1 | system user | | NULL | Connect | 373198 | Waiting for master to send event | NULL | | 2 | system user | | NULL | Connect | 1197 | Slave has read all relay log; waiting for more updates | NULL | | 4 | system user | | NULL | Connect | 4292 | Waiting for an event from Coordinator | NULL | | 5 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 6 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 7 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 8 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 9 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 10 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 11 | system user | | NULL | Connect | 373198 | Waiting for an event from Coordinator | NULL | | 16 | root | 172.16.16.34:37263 | NULL | Query | 0 | starting | show processlist | +----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+
从库会有八个线程来等待事物处理,已经不是一个了。
最近好友看到我的文章,指出了一些错误的理解。感谢,我大概又测试了一下。首先我们的环境还是不变的,我们有一主两从的一套MySQL高可用结构,A(主),B(MTS从),C(普通从库)三个MySQL数据库,版本5.7
我们的设置
mysql> show variables like 'binlog_group_commit_sync_delay'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | binlog_group_commit_sync_delay | 0 | +--------------------------------+-------+ 1 row in set (0.00 sec)
下面先在主库进行压测,主库A上进行压力测试。然后观看三个数据库的日志。
[root@mxqmongodb2 tpcc-mysql]# ./tpcc_start -h127.0.0.1 -P3306 -d tpcc -u root -p123456 -w 10 -c 50 -r 30 -l 300
压测结束开始看日志信息:
[root@localhost log]# mysqlbinlog /home/mysql/db3306/log/mysql-bin.000013 |grep last_commit
首先上A主库的:
然后看B,开启多线程复制的从库的日志信息
接下来看C普通复制从库的日志信息:
通过对比发现,主库和普通的从库由于并没有开启组提交,但是也是并行执行的,也就是说在MySQL5.7当中,组提交是默认开启的,而binlog_group_commit_sync_delay参数相对来说是因为考虑到从库的性能,能够更多的一次性提交多个事物提交来减少IO,所以开启了组提交的B从库,事物是分组提交的,这也就是说明,MTS本身就是基于组提交来实现的。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- centos7下yum方式安装MySQL5.7 2019-07-24
- linux上安装mysql5.7 2019-07-24
- linux7 配置mysql5.7字符集编码 2019-07-24
- 在无界面centos7上部署MYSQL5.7数据库 2019-07-24
- MySQL案例07:MySQL5.7并发复制隐式bug 2018-07-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash