主从延迟调优思路

这篇具有很好参考价值的文章主要介绍了主从延迟调优思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主从延迟调优思路

1、什么是主从延迟?

本质是从库的回放跟不上主库,回放阶段的延迟

主从延迟调优思路

2、主从延迟常见的原因有哪些?

1、大事务,从库回放时间较长,导致主从延迟

2、主库写入过于频繁,从库回放跟不上

3、参数配置不合理

4、主从硬件差异

5、网络延迟

6、表没有主键或者索引大量频繁的更新

7、一些读写分离的架构,从库的压力比较大

3、解决主从延迟有哪些方法

1、对于大事务,拆分成小事务

2、开启并行复制

3、升级从库硬件

4、尽量都有主键

4、什么是并行复制,参数有哪些?

回顾MySQL并行复制的路程

MySQL5.6 是基于数据库级别的并行复制

slave-parallel-type=DATABASE(不同库的事务,没有锁冲突)

主从延迟调优思路

MySQL5.7 基于group commit的并行复制

slave-parallel-type=LOGICAL_CLOCK : Commit-Parent-Based模式(同一组的事务[last-commit相同]没有锁冲突. 同一组,肯定没有冲突,否则没办法成为同一组)

上面是从库的配置,并行复制依赖于主库的组提交(注意区分组复制)

greatsql> show variables like '%group%delay%';
+-----------------------------------------+-------+
| Variable_name                           | Value |
+-----------------------------------------+-------+
| binlog_group_commit_sync_delay          | 0     |
| binlog_group_commit_sync_no_delay_count | 0     |
+-----------------------------------------+-------+
2 rows in set (0.01 sec)
  • binlog_group_commit_sync_delay:等待多少时间后才进行组提交

  • binlog_group_commit_sync_no_delay_count:等待多少个事务后才进行组提交

以上参数都依赖于主库业务繁忙的情况下,如果业务不频繁,就会很尴尬

  • binlog_group_commit_sync_no_delay_count:这个参数设置成2个

比如只有一个线程执行一个事务,第二个事务在24h之后执行,那么这个事务需要等待24h才能提交,十分坑

  • binlog_group_commit_sync_delay

假如设置成200ms,只有一个线程执行一个事务,本来10ms可以提交,还必须等待200ms才可以

线上一般是两个都设置,举个例子,就像是小船运人过河

假设我们的参数这么设置:

binlog_group_commit_sync_delay=200;
binlog_group_commit_sync_no_delay_count=2

要么满足200ms直接走,要么满足2个人直接走,这么人性化了很多,但是在业务不繁忙的情况下依然尴尬

主从延迟调优思路

MySQL8.0 基于write-set的并行复制

基于主键的冲突检测(binlog_transaction_depandency_tracking = COMMIT_ORDERE|WRITESET|WRITESET_SESSION, 修改的row的主键或非空唯一键没有冲突,即可并行)

事务检测算法:transaction_write_set_extraction = XXHASH64

MySQL会有一个变量来存储已经提交的事务HASH值,所有已经提交的事务所修改的主键(或唯一键)的值经过hash后都会与那个变量的集合进行对比,来判断改行是否与其冲突,并以此来确定依赖关系

这里说的变量,可以通过这个设置大小:binlog_transaction_dependency_history_size

这样的粒度,就到了 row 级别了,就是此时并行的粒度更加精细,并行的速度会更快,某些情况下,说slave的并行度超越master也不为过(master是单线程的写,slave也可以并行回放)

简单来说就是基于行去并行回放,rc级别下不同的行不会有锁冲突

组提交的表现:

看主库binlog的last_committed值是否一致,一致就可以并行回放,不一致只能串行

主从延迟调优思路

5、实战分析

5.1 查看线上主从延迟

Seconds_Behind_Master: 48828

可见延迟很高,接近14个小时,此时主库也在不断的写数据,大概是6分钟一个binlog,一个为500M

5.2 查看当前的复制配置

查看从库配置:

greatsql> show variables like '%slave%para%';
+------------------------+---------------+
| Variable_name      | Value     |
+------------------------+---------------+
| slave_parallel_type   | LOGICAL_CLOCK |
| slave_parallel_workers | 128      |
+------------------------+---------------+
2 rows in set (0.02 sec)

延迟现象:

从库一直在追,说明不是大事务,但是Seconds_Behind_Master延迟一直在增长

Retrieved_Gtid_Set: 00000000-0000-0024-0046-41a8003b4b99:242966351-253068975,
00000000-0000-0040-0095-5fff003b4b99:91056629-110569633,
00000000-0000-005c-0ced-7bae003b4b99:150292055-160253193,
31f4399f-ade5-11ed-a544-00163ebdeb51:1-12,
​      Executed_Gtid_Set: 00000000-0000-0024-0046-41a8003b4b99:1-252250235,
00000000-0000-0040-0095-5fff003b4b99:1-109120315,
00000000-0000-005c-0ced-7bae003b4b99:1-159504296,
31f4399f-ade5-11ed-a544-00163ebdeb51:1-12,
​        Auto_Position: 1

此时怀疑并没有并行复制,主库可能没设置组提交(只是一个猜想)

5.3 进一步验证,查看主库的binlog

查看主库的参数配置:还是为组提交的规则

greatsql> show variables like '%binlog_transac%';
+--------------------------------------------+----------+
| Variable_name                              | Value    |
+--------------------------------------------+----------+
| binlog_transaction_compression             | OFF      |
| binlog_transaction_compression_level_zstd  | 3        |
| binlog_transaction_dependency_history_size | 25000    |
| binlog_transaction_dependency_tracking     | WRITESET |
+--------------------------------------------+----------+
4 rows in set (0.02 sec)

再看其组提交的配置:表示没有开组提交

greatsql> show variables like '%group%delay%';
+-----------------------------------------+-------+
| Variable_name                           | Value |
+-----------------------------------------+-------+
| binlog_group_commit_sync_delay          | 0     |
| binlog_group_commit_sync_no_delay_count | 0     |
+-----------------------------------------+-------+
2 rows in set (0.01 sec)

进一步验证,看其binlog,发现果然last_committed都不一样,表示不能并行

主从延迟调优思路

5.4 主库设置参数,再次解析其binlog

binlog_transaction_dependency_tracking改为WRITESET模式

greatsql> show variables like '%transaction%';
+----------------------------------------------------------+-----------------+
| Variable_name                                            | Value           |
+----------------------------------------------------------+-----------------+
| binlog_direct_non_transactional_updates                  | OFF             |
| binlog_transaction_compression                           | OFF             |
| binlog_transaction_compression_level_zstd                | 3               |
| binlog_transaction_dependency_history_size               | 25000           |
| binlog_transaction_dependency_tracking                   | WRITESET        |
| kill_idle_transaction                                    | 300             |
| performance_schema_events_transactions_history_long_size | 10000           |
| performance_schema_events_transactions_history_size      | 10              |
| replica_transaction_retries                              | 10              |
| session_track_transaction_info                           | OFF             |
| slave_transaction_retries                                | 10              |
| transaction_alloc_block_size                             | 8192            |
| transaction_allow_batching                               | OFF             |
| transaction_isolation                                    | REPEATABLE-READ |
| transaction_prealloc_size                                | 4096            |
| transaction_read_only                                    | OFF             |
| transaction_write_set_extraction                         | XXHASH64        |
+----------------------------------------------------------+-----------------+
17 rows in set (0.00 sec)

再次查看其binlog,看到有很多都可以并行回放

主从延迟调优思路

5.5 优化完成

即使主库在大批量的写入,但延迟正在慢慢缩减,追上只是时间问题,今天就是0了

主从延迟调优思路


Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

主从延迟调优思路

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群

主从延迟调优思路文章来源地址https://www.toymoban.com/news/detail-852046.html

到了这里,关于主从延迟调优思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 主从同步的延迟问题、原因及解决方案

    主从同步的延迟问题、原因及解决方案 MySQL的主从同步在实际使用过程中会有从库延迟的问题,那么为什么会有这种问题呢? 如何避免这种问题呢? 情况一: 从服务器配置过低导致延迟 这类延迟场景的出现往往是主节点拥有较大规格的配置,而只读节点却购买了一个最小规格的

    2024年02月16日
    浏览(9)
  • Linux TCP/IP内核参数调优,网络高延迟大吞吐(方案二)。

    方案一:Linux TCP/IP内核参数调优,网络高延迟大吞吐。_net.ipv4.tcp_wmem_liulilittle的博客-CSDN博客 nano /etc/sysctl.conf sysctl -p 另类设置

    2024年02月15日
    浏览(20)
  • Sqlserver_Oracle_Mysql_Postgresql不同关系型数据库之主从延迟的理解和实验

    关系型数据库主从节点的延迟是否和隔离级别有关联,个人认为两者没有直接关系,主从延迟在关系型数据库中一般和这两个时间有关:事务日志从主节点传输到从节点的时间+事务日志在从节点的应用时间 事务日志从主节点传输到从节点的时间,相关因素有以下2点: 1、事

    2024年02月14日
    浏览(16)
  • Linux 的性能调优的思路

    Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql等。 开源软件的最大理念是自由、开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应

    2024年02月08日
    浏览(10)
  • 【Jvm】性能调优(下)线上问题排查思路汇总

    【Jvm】性能调优(下)线上问题排查思路汇总

    【Jvm】性能调优(上)线上问题排查工具汇总 【Jvm】性能调优(中)Java中不得不了解的OOM Error 标准参数(-) :所有的JVM实现都必须实现该功能且向后兼容 非标准参数(-X) : 默认Jvm实现该功能 ,但是不保证所有jvm实现都满足,且 不保证向后兼容 非稳定参数(-XX) : 各

    2024年02月21日
    浏览(16)
  • 【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

    【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

    对数据库架构进行优化是为了提高数据库系统的性能、可扩展性、稳定性和可维护性。MySQL官方说:单表2000万数据,性能就达到瓶颈了,为了保证查询效率需要让每张表的大小得到控制。 再来说,为什么要提高查询效率呢? 除了普通的用户查询操作,增、删、改操作都包含

    2024年02月11日
    浏览(11)
  • 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 上一篇:没有了 下一篇:敬请期待…   Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄

    2024年02月16日
    浏览(17)
  • [UE笔记]延迟与延迟补偿

    [UE笔记]延迟与延迟补偿

    Lag即延迟,是多人游戏中常会出现的一个现象。lag compensation即延迟补偿,是一种减少延迟对游戏造成影响的技术。 多个含义 一种指令(用于验证ip地址是否存在或者主机是否正在运行) 描述服务器需要多长时间响应客户端的输入 在反应时间很重要的多人游戏中,Ping值越低

    2024年02月02日
    浏览(10)
  • [MQ] 延迟队列/延迟插件下载

    [MQ] 延迟队列/延迟插件下载

    ✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏                             📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏                            📖Docker专栏📖Reids专栏📖MQ专栏📖SpringClou

    2024年02月01日
    浏览(21)
  • 采用RibbaitMq延迟队列官方插件实现延迟队列

    采用RibbaitMq延迟队列官方插件实现延迟队列

    RibbaitMq插件实现延迟队列主要是延迟消息到交换机的时间。 TTL+死信队列实现延时队列:正常消息过期没有被消费掉,进入死信队列后立即消息。 本章主要采用第一种方式。 1.安装RabbirMQ自行百度或者参考推荐资源: RabbitMQ部署-Windows篇 - 知乎 RabbitMQ windows下的安装与配置 - 腾

    2023年04月09日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包