iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL并行复制配置与调优的操作
  • 444
分享到

MySQL并行复制配置与调优的操作

2024-04-02 19:04:59 444人浏览 薄情痞子
摘要

本篇文章给大家主要讲的是关于Mysql并行复制配置与调优的操作的内容,感兴趣的话就一起来看看这篇文章吧,相信看完mysql并行复制配置与调优的操作对大家多少有点参考价值吧。并行复制产生的背景:因为I/O t

本篇文章给大家主要讲的是关于Mysql并行复制配置与调优的操作的内容,感兴趣的话就一起来看看这篇文章吧,相信看完mysql并行复制配置与调优的操作对大家多少有点参考价值吧。

并行复制产生的背景:
因为I/O thread和sql thread是单线程工作的,而Master是可以多线程写入的,所以主从难免造成延迟
基于此,在5.6,5.7,8.0版本都在SQL线程上实现了多线程,来提升slave的并发


为什么不是I/O多线程?
I/O没必要多线程,因为I/O线程并不是瓶颈啊 (没怎么理解)


并行复制的目的:
让Slave SQL线程尽可能以多线程工作,解决复制延迟的问题

并行复制实现的前提:
能够进行并行复制,关键在于多事务之间是否有冲突


MySQL5.6基于schema的并行复制:
应用场景:
比较适用于一个库中有多个schema的场景


并行复制的原理:
MySQL5.6开启并行复制功能后,SQL线程变成coordinator线程,由其判断是否可以并发执行,这意味着一个worker线程可以处理一个数据库的连续事务,而不用等待其它数据库完成
如果可以并行执行,选择worker线程执行二进制日志
如果不可以并行执行,如:DDL或者跨schema操作,则等待所有的worker线程执行完成之后再执行当前日志


摘自网上的一张图片,供参考理解:

MySQL并行复制配置与调优的操作


基于schema的并行复制带来的问题:
因为MySQL5.6并行复制只是基于schema,但对于单库多表的复制场景是无法实现的,甚至性能可能还达不到原来的单线程复制,而在实际工作中单库多表比多库多表的场景更为常见。
MySQL5.6基于schema级别的并发复制可以解决业务表放在不同的DATABASE下同步延迟的问题,但是在实际生产中大部分表还是放在同一个库中的,这种情况即使设置slave_parallel_workers大于0,也无法进行并发。在高并发的情况下,依然会造成主从复制延迟

MySQL5.6并行复制开启:(前提是配置好主从复制环境)

mysql> stop slave;

Query OK, 0 rows affected (0.03 sec)


mysql> set global slave_parallel_workers=8;

Query OK, 0 rows affected (0.05 sec)


mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.07 sec)


MySQL5.6并行复制原理图:


MySQL并行复制配置与调优的操作


并行复制参数说明:

slave_parallel_workers:
Number of applier threads for executing replication transactions in parallel. A value of 0 disables slave multithreading. Not supported by MySQL Cluster


MySQL5.7并行复制原理:
基于组复制(group commit)实现

如何知道事务是否在同一组中?
在MySQL 5.7版本中,其设计方式是将组提交的信息存放在GTID中。那么如果用户没有开启GTID功能,即:将参数gtid_mode设置为OFF呢?
MySQL 5.7引入了称之为Anonymous_Gtid(ANONYMOUS_GTID_LOG_EVENT)的二进制日志event类型,组提交信息存放在 Anonymous_Gtid 中。


当开启GTID时,每一个操作语句(DML/DDL)执行前就会添加一个GTID事件,记录当前全局事务ID;同时在MySQL 5.7版本中,组提交信息也存放在GTID事件中,有两个关键字段last_committed,sequence_number就是用来标识组提交信息的。在InnoDB中有一个全局计数器(global counter),在每一次存储引擎提交之前,计数器值就会增加。在事务进入prepare阶段之前,全局计数器的当前值会被储存在事务中,这个值称为此事务的commit-parent(也就是last_committed)。last_committed表示事务提交的时候,上次事务提交的编号,如果事务具有相同的last_committed,表示这些事务都在一组内,可以进行并行的回放。而sequence_number是顺序增长的,每个事务对应一个序列号。


这意味着在MySQL 5.7版本中即使不开启GTID,每个事务开始前也是会存在一个Anonymous_Gtid,而这个Anonymous_Gtid事件中就存在着组提交的信息。反之,如果开启了GTID后,就不会存在这个Anonymous_Gtid了,从而组提交信息就记录在非匿名GTID事件中。

MySQL如何将这些事务进行分组的?
一个组提交的事务都是可以并行回放,因为这些事务都已进入到事务的prepare阶段,则说明事务之间没有任何冲突(否则就不可能提交)


MySQL5.7并行复制简介:
1)MySQL 5.7才可称为真正的并行复制,这其中最为主要的原因就是slave云服务器的回放与master是一致的,即master云服务器上是怎么并行执行的,那么slave上就怎样进行并行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求(基于库的并行复制也没有要求)
2)MySQL5.7并行复制支持表级
3)Enhanced Multi-threaded Slaves(MTS)

MySQL5.7并行复制参数:
SHOW VARIABLES LIKE 'slave_parallel_%'
Variable_name       Value
slave_parallel_type DATABASE (变量slave-parallel-type可以有两个值:DATABASE 默认值,基于库的并行复制方式;LOGICAL_CLOCK:基于组提交的并行复制方式(基于表))
slave_parallel_workers      0

MySQL 5.7并行复制配置与调优:
# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
slave_preserve_commit_order=1
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

MySQL5.7在线开启并行复制(多线程复制):
参考视频:https://www.imooc.com/video/10921


在Slave云服务器上停止所有链路的复制

stop slave
set global slave-parallel-type=LOGICAL_CLOCK
set global slave-parallel-workers=16
start slave
show processlist(看到16个SQL线程)

MySQL5.7应用事务顺序和realy log记录事务顺序不一样的问题:
MySQL 5.7后的MTS可以实现更小粒度的并行复制,但需要将slave_parallel_type设置为LOGICAL_CLOCK,但仅仅设置为LOGICAL_CLOCK也会存在问题,因为此时在slave上应用事务的顺序是无序的,和relay log中记录的事务顺序不一样,这样数据一致性是无法保证的,为了保证事务是按照relay log中记录的顺序来回放,就需要开启参数slave_preserve_commit_order

以上关于MySQL并行复制配置与调优的操作详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的数据库板块。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL并行复制配置与调优的操作

本文链接: https://www.lsjlt.com/news/35451.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 优化与调优MySQL的锁机制
    MySQL 锁的优化与调优在高并发的数据库操作中,锁是非常重要的机制之一。MySQL 提供了各种类型的锁,如共享锁、排他锁、表锁、行锁等,来保证数据的一致性和并发控制。然而,在大规模的数据库应用中,锁也可能成为性能瓶颈,影响系统的吞吐能力。...
    99+
    2023-12-21
    MySQL优化 锁优化 锁调优
  • MySQL的调优思路和实际操作
    这篇文章主要讲解了“MySQL的调优思路和实际操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的调优思路和实际操作”吧! 调优思路: 1.设...
    99+
    2024-04-02
  • quartz定时执行任务,并配置web.xml的操作方法
    今天项目上需要做个定时任务,临时学的,quartz的功能还是很强大用起来也方便,这里的demo只是实现每天定时执行一次,其他功能可以在此基础上继续深入学习,哈哈 睡觉,明天继续。一、maven依赖:<dependency> &...
    99+
    2023-05-31
    quartz web.xml 配置
  • ubuntu server配置mysql并实现远程连接的操作方法
    服务器:ubuntu server 16.04 LSS 客户机:ubuntu 16.04 LTS 服务器配置 服务器安装mysql # eric @ userver in ~ [14:00:31] $...
    99+
    2024-04-02
  • mysql的主从复制如何配置
    这篇文章给大家分享的是有关mysql的主从复制如何配置的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。数据库复制对于系统高可用、高性能的提升扮演者很重要的角色。1 主库配置1.1 ...
    99+
    2024-04-02
  • Linux下MySQL主从复制的配置
    本篇内容主要讲解“Linux下MySQL主从复制的配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下MySQL主从复制的配置”吧! MySQL...
    99+
    2024-04-02
  • MySQL配置主从复制的方法
    今天小编给大家分享一下MySQL配置主从复制的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、检测通信查看主库(mas...
    99+
    2023-07-02
  • Elasticsearch7.3安装与配置的操作过程
    本篇文章为大家展示了Elasticsearch7.3安装与配置的操作过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、jdk的安装1.下载jdk .JDK下载地...
    99+
    2024-04-02
  • 深入浅出讲解MySQL的并行复制
    一、并行复制的背景 首先,为什么会有并行复制这个概念呢? 1. DBA都应该知道,MySQL的复制是基于binlog的。  2. MySQL复制包括两部分,IO线程 和 SQL线程。 ...
    99+
    2024-04-02
  • 如何配置与监控MySQL 5.5半同步复制
    小编给大家分享一下如何配置与监控MySQL 5.5半同步复制,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 在MySQL的复制环境中,数据同步默认是异步的,Ma...
    99+
    2024-04-02
  • 半同步与异步的MySQL主从复制如何配置
    这篇文章主要介绍了半同步与异步的MySQL主从复制如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、MySQL主从复制原理这里我以M...
    99+
    2024-04-02
  • react项目优化配置的操作详解
    目录优化-配置CDN优化-路由懒加载 使用步骤代码实现查看效果优化-配置CDN 通过 craco 来修改 webpack 配置,从而实现 CDN 优化 yarn add ...
    99+
    2024-04-02
  • Docker中优化Mysql运行内存的操作
    使用docker stats查询运行内存,从这里可以看到,我的mysql一共用了400mb内存。经过下面操作可以优化为只占用100mb内存。 1、进入容器 docker exec ...
    99+
    2024-04-02
  • mysql主从复制的安装流程操作
    本篇内容主要讲解“mysql主从复制的安装流程操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql主从复制的安装流程操作”吧!Mysql主从复制一、一主...
    99+
    2024-04-02
  • MySQL复制以及调优原理的示例分析
    这篇文章主要介绍MySQL复制以及调优原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 简介MySQL自带复制方案,带来好处有:数据备份。负载均衡。分布式数据。概念介...
    99+
    2024-04-02
  • 如何实现MySQL底层优化:连接池的优化与配置参数调整
    如何实现MySQL底层优化:连接池的优化与配置参数调整引言MySQL是一种常用的开源数据库管理系统,它的性能直接影响到系统的稳定性和响应速度。而连接池是一种重要的优化手段,可以有效地减少系统连接数据库的开销。本文将介绍如何对MySQL连接池...
    99+
    2023-11-08
    MySQL 连接池 参数调整
  • MYSQL+复制+MHA+VIP配置的示例分析
    这篇文章给大家分享的是有关MYSQL+复制+MHA+VIP配置的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、 mysql安装①cmake的安装cp cmake-2....
    99+
    2024-04-02
  • Springboot引入hibernate配置自动建表并进行增删改查操作
    目录前言一、引入依赖二、配置yml三、写代码四、测试结果前言 有些业务比较复杂,比如我们需要新建10张表,每张表有10个字段,如果用手工来操作,肯定非常浪费时间,而且随着代码中对实体...
    99+
    2024-04-02
  • vscode 配置java环境并调试运行的详细过程
    下载vscode以及安装jdk 度娘一大堆 这里不介绍 jdk最好安装jdk11及以上 vscode扩展插件有关 在vscode扩展插件中安装图示插件包,该包基本覆盖java所需的...
    99+
    2024-04-02
  • MongoDB的分布式锁与并发控制怎么配置
    MongoDB没有内置的分布式锁机制,但可以通过一些方法来实现分布式锁和并发控制。以下是一种基于MongoDB的分布式锁和并发控制的...
    99+
    2024-05-07
    MongoDB
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作