mysql5.7--多线程并行参数

为解决主从复制延迟问题,MySQL 5.7引入基于组提交的并行复制,由多个参数控制。如slave-parallel-workers设置应用程序线程数,slave-parallel-type指定并行执行策略,slave_preserve_commit_order确保事务提交顺序。这些参数对多线程副本的日志记录和恢复有影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了解决主从复制延迟问题,在MySQL 5.7中,引入了基于组提交的并行复制(Enhanced Multi-threaded Slaves)

主要由以下参数控制,

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=8

slave_preserve_commit_order=on

master_info_repository=TABLE

sync-master-info=1

relay_log_info_repository=TABLE

sync-relay-log=1

sync-relay-log-info=1

relay_log_recovery=ON

 

slave-parallel-workers

设置用于并行执行复制事务的应用程序线程数。将此变量设置为大于0的数字将创建具有此应用线程数量的多线程slave。设置为0(默认值)时,并行执行被禁用,并且slave使用单个应用程序线程。设置 slave-parallel-workers没有立即生效。变量的状态适用于所有后续start slave语句。

多线程副本通过使用协调器线程和此变量配置的应用程序线程数来提供并行执行。事务在应用程序线程之间的分配方式由slave_parallel_type配置。slave并行应用的事务可能会无序提交,除非slave_preserve_commit_order=1。因此,检查最近执行的事务并不能保证源中所有以前的事务都已在slave上执行。这对使用多线程slave时的日志记录和恢复有影响。

slave-parallel-type

当使用多线程副本(slave_parallel_workers大于0)时,此变量指定用于决定允许哪些事务在副本上并行执行的策略。该变量对未启用多线程的副本无效。可能的值为:

LOGICAL_CLOCK:属于同一二进制日志组的事务在源上落实,将并行应用在副本上。根据事务的时间戳跟踪事务之间的依赖关系,以在可能的情况下提供附加的并行化。

DATABASE:并行应用更新不同数据库的事务。仅当将数据分区到多个数据库中并在源上同时并发地对其进行更新时,此值才适用。不得存在跨数据库的约束,因为这样的约束可能会在副本数据库上违反。

当 slave_preserve_commit_order=1 设置,只能使用LOGICAL_CLOCK。

slave_preserve_commit_order

对于多线程副本,此变量的设置1确保事务在副本上的外部化顺序与SLAVE中继日志中出现的顺序相同,并防止已从中继日志执行的事务序列出现间隙。此变量对未启用多线程的副本无效。请注意, slave_preserve_commit_order=1 这不会保留非事务性DML更新的顺序,因此,这些更新可能会在中继日志中在其之前的事务之前提交,这可能会导致差距。

slave_preserve_commit_order=1要求在SLAVE上启用--log bin和--log slave更新,slave_parallel_type设置为LOGICAL_CLOCK。在更改此变量之前,必须停止所有复制线程(如果使用多个复制通道,则为所有复制通道)。

在启用slave_preserve_commit_order的情况下,执行线程将等待,直到提交之前的所有事务。当线程等待其他工作线程提交其事务时,它将其状态报告为等待前一个事务提交。(在MySQL 5.7.8之前,它显示为Waiting for its turn to commit。)在多线程SLAVE上启用此模式可确保它永远不会进入源不处于的状态。这支持将复制用于读取横向扩展。

如果slave_preserve_commit_order=0,则SLAVE并行应用的事务可能会无序提交。因此,检查最近执行的事务并不能保证源中所有以前的事务都已在SLAVE上执行。从SLAVE的中继日志中执行的事务序列中可能会有间隙。这对使用多线程SLAVE时的日志记录和恢复有影响。设置 slave_preserve_commit_order=1可防止出现间隙,但不能防止源二进制日志位置滞后(其中Exec_master_log_pos 落后于已执行交易的位置)。所以建议master_info_repository,relay_log_info_repository设置为TABLE。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值