总是使一个国家变成人间地狱的东西, 恰恰是人们试图将其变成天堂@荷尔德林 (哈耶克的《通往奴役之路》第2章把此句作为引言)

last_commited && sequence_number

MySQL 2019-07-12 浏览量: 90 字数统计: 198 最后更新: 2019-07-19 21:48

文章目录[显示]

两个阶段提交是为了保证 binlog(server层)和redo(引擎层)一致。

下面是两阶段提交的过程。

  1. binlog prepare (这个时候 binlog 已经 写到 cache 里面了,所以 load 数据的时候可能会报 binlog_cache_size 不够)
  2. redo prepare
  3. binlog commit

    1. flush(binlog cache 写到 os buffer)
    2. fysnc(redo 落盘)
    3.  redo 写 commit 标记
  4. innodb commit

last_commited && sequence_number

last_commited 是在 prepare 阶段记录的,而且是上一次组提交的最大的sequence_number
sequence_number 是在 commit 的flush阶段记录的,递增+1

举三个例子

一、

session1 > insert 1

session2 > insert 2
session2 > commit

session3 > insert 3
session3 > commit

session1 >commit

此时 binlog 里面记录的 last_commited && sequence_number

insert 2 :last_commited=0 sequence_number=1
insert 3 :last_commited=1 sequence_number=2
insert 1 :last_commited=0 sequence_number=3

二、

session1 > insert 1

session2 > insert 2

session3 > insert 3

session4 > insert 4
session4 > commit

session3 > commit
session2 > commit
session1 >commit

此时 binlog 里面记录的 last_commited && sequence_number

insert 4 :last_committed=0    sequence_number=1
insert 3 :last_committed=0    sequence_number=2
insert 2 :last_committed=0    sequence_number=3
insert 1 :last_committed=0    sequence_number=3

三、

session1 > insert 1

session2 > insert 2

session3 > insert 3

session4 > insert 4
session4 > commit

session5 > insert 5
session5 > commit

session6 > insert 6
session6 > commit

session3 > commit
session2 > commit
session1 >commit

此时 binlog 里面记录的 last_commited && sequence_number

insert 4 :last_committed=0    sequence_number=1
insert 5 :last_committed=1    sequence_number=2
insert 6 :last_committed=2    sequence_number=3
insert 3 :last_committed=0    sequence_number=4
insert 2 :last_committed=0    sequence_number=5
insert 1 :last_committed=0    sequence_number=6

问题

拿第三个例子来说,在从库回放的时候last_committed 相同的可以一起提交,是以什么顺序提交的呢???

如果从库的 slave_parallel_workers 设置为0的话会在从库顺序回放,但是8的话 也会在从库顺序回放
这是为什么????

insert 4 :last_committed=0    sequence_number=1
insert 5 :last_committed=1    sequence_number=2
insert 6 :last_committed=2    sequence_number=3
insert 3 :last_committed=3    sequence_number=4
insert 2 :last_committed=4    sequence_number=5
insert 1 :last_committed=5    sequence_number=6

参数:
主库

| binlog_group_commit_sync_delay          | 2000   |
| binlog_group_commit_sync_no_delay_count | 16     |

从库

| binlog_group_commit_sync_delay          | 0      |
| binlog_group_commit_sync_no_delay_count | 0      |
| log_slave_updates            | ON                    |
| slave_parallel_type          | LOGICAL_CLOCK         |
| slave_parallel_workers       | 8                     |
| slave_preserve_commit_order  | ON                    |
小蜗牛 说:
Freedom is the source from which all meaning and all values spring .


文章版权归 原文作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权| 转载必须包含本声明,并以超链接形式注明原文作者和本文原始地址: https://www.tougetu.com/2019/07/multi_threade_replication_1.html

还不快抢沙发

添加新评论

代码 Pastebin Gist 加粗 删除线 斜体 链接 签到