诡象追踪:MySQL开binlog性能更好?!

10步精通:MySQL数据同步策略与备份恢复的艺术 Binlog,全称Binary Log,是MySQL的二进制日志。它就像是MySQL的日记本,记录了所有的变更操作。📝在数据库的世界里,事务是一系列操作的集合,要么全部成功,要么全部失败。这就像是魔法咒语,要么完全施展,要么完全不施展。🔮数据同步不仅仅是技术,它更是一门艺术。它要求我们对数据的流动有深刻的理解和精准的控制。在这一章节,我们将回顾我们所学的,并且展望数据同步的未来。 阅读详情

版本&平台:

版本:MySQL 5.7.38

cpu:112核

内存:512G

磁盘:pcie nvme 6.4T(RW均>5GB/S)

现象:

        同样条件下(同个机器的同个实例,测试场景相同,配置参数也相同),仅修改binlog开关,当关闭binlog时,性能更差,测试场景为sysbench, oltp_update_index, 256并发,64个表,单表100W数据。

双1测试,256并发:

binlog开关

TPS

平均延迟(ms)

最大延迟(ms)

最大cpu占用

开

67983

3.73

1316

20.4核

关

47644

5.37

880

7.4核

        当关闭Binlog后,tps更低,延迟更高,非常诡异。MySQL binlog的生成,即要占cpu又要占io,当sync_binlog=1时,还会阻塞innodb事务提交,延迟理应更高,这个结果非常反直觉。

深入分析:

        实测既然存在关binlog性能表现更好的现象,就一定有其合理性。高并发下锁的热点争抢影响超过binlog的开销,当开了binlog后让整个流程变慢,锁热点下降让整个流程更顺畅,就可能开binlog吞吐量更大,也就是性能更好。关binlog后遇到的并发热点,如trx sys mutex、lock sys mutex、log sys mutex这些锁,因为机器物理核很多,导致实际工作线程并发很大,抢cpu竞争非常激烈,盖过了binlog的开销,反而可能让数据库整理吞吐量下降。并且当前binlog是组提交,要写Binlog时,会将多个并发提交事务合并到一个组写盘,innodb工作线程等写盘完成后被唤醒再继续做innodb 的最后commit,这里会让binlog的开销大大降低。各个用户连接线程抢innodb工作线程是强占cpu自旋方式抢,当争抢的用户线程过多时,额外cpu开销高,就可能会导致性能下降。

        即然各线程争抢资源激烈,那么降低这种资源竞争,应该可以提高吞量,于有了下面验证1。

验证1:降低每个spin lock时间,即减少每次竞争时间,应该能提升性能,测试结果如下:

将spin_lock(innodb_spin_wait_delay )时间从默认6降到2:

binlog开关

TPS

平均延迟(ms)

最大延迟(ms)

最大cpu占用

开

67983

3.73

1316

20.4核

关

47644

5.37

880

7.4核

关(验证1)

53536

4.78

758

6.6核

        可以看到,TPS提升明显,延迟下降,峰值cpu下降,优化效果明显,减少竞争可以提升性能。

验证2:上面提到当系统热点出现在相关锁时,最直接原因是innodb处理能力不够,那么提升innodb处理能力理论上是能提升性能的,将innodb工作线程从当前默认的16个提升,前面spinlock优化保留为2:

binlog开关

innodb工作线程

TPS

平均延迟(ms)

最大延迟(ms)

最大cpu占用

开

16

67983

3.73

1316

20.4核

关

16

47644

5.37

880

7.4核

关(验证1)

16

53536

4.78

758

6.6核

关(验证2)

32

74121

3.45

490

13.3核

关(验证3)

64

81503

3.14

690

21.3核

关(验证4)

128

75441

3.39

1044

35.8核

        整体来看,当innodb并发处理能力(innodb_thread_concurrency)越高,性能越好,延迟也会降低,但并不是越高越好,设置过多也会降低处理力。最高值为81503,相对于优化前的47644,提升非常多。

        另外,观察到当并发线程小于或等于16时,innodb_thread_sleep_delay值会不停增长(innodb自己动态调整),甚至增到几万,这会严重影响系统吞吐量。

验证5:经过上面的参数调整,关binlog可以远超开Binlog的处理能力,继续组合不同参数值,尝试跑个最优值。

binlog开关

innodb工作线程

TPS

平均延迟(ms)

最大延迟(ms)

最大cpu占用

开

16

67983

3.73

1316

20.4核

关

16

47644

5.37

880

7.4核

关,spinlock 3 

32

71219

3.59

543

12.8核

关,spinlock 3 

80

91384

2.80

265

28.4核

关,spinlock 3 

112

90220

2.83

293

35.9核

关,spinlock 6 

32

60773

4.21

1346

14.2核

关,spinlock 6 

80

88421

2.89

503

30.6核

关,spinlock 6 

112

90812

2.82

317

39.5核

        经过多次搭配,关binlog情况下,spin_lock为3,innodb并发为80时能测到最优值91384,与不调优的47644比,将近提升一倍。

验证6:继续分析,如果用户线程并发低,小于或等于innodb 并发线程时,不存在竞争innodb工作线程资源情况,此时产生了binlog的场景就没有理由比不产生binlog的场景性能好,且有binlog的延迟一定要高,实测如下:

innodb_spin_wait_delay 还原默认值6,innodb_thread_concurrency还原初始值16,压测场景:sysbench, oltp_update_index, 16并发(原来是256并发),64个表,单表100W数据,即其它全不变,用户线程从256减到16个。

binlog开关

TPS

平均延迟(ms)

最大延迟(ms)

最大cpu占用

开binlog

29176

0.55

10.01

5.3核

关binlog

50267

0.32

12.46

7.3核

        这个测试结果完全符合预期,一般场景下,MySQL实例cpu核数较少,所以通常开binlog性能就是要更差的。

结论:

        实测来看,开binlog开销肯定要比不开binlog大,但是存在开binlog吞吐量反而要高的场景,这在cpu核数很多的情况下是存在的。

        对于cpu核数不多的情况,比方说16核,物理上真正并发干活线程最多16个,innodb配置的16个干活线程,真正干活的用户线程估计很难超过10个,他们之间争抢innodb工作线程的竞争不会激烈。如果机器像本次测试机一样112核,真正能并发干活的线程可以是上百个,若innodb同样只提供最多16个干活线程,用户线程与innodb线程比例可能高达10:1,争抢激烈,这个影响可能远超IO影响,导致关binlog性能更差。

外向交货单批次赋值的标准姿势:用 BAPI_OUTB_DELIVERY_CHANGE 把 LIPS-CHARG 改得稳、改得干净 摘要: 外向交货单批次赋值涉及严格的业务约束,包括批次管理状态、单据状态、拆分规则等,直接更新表 LIPS 不可取。推荐使用 BAPI_OUTB_DELIVERY_CHANGE 接口,通过标准业务逻辑实现批次修改。关键点包括:区分单批次分配与批次拆分场景,正确设置 ITEM_CONTROL 控制结构,并确保单位/数量数据完整。附可直接执行的ABAP代码示例,实现安全可靠的批次更新流程。 (字数:149字) 阅读详情

相关推荐

遥感生态指数(RSEI)——四个指数的计算

遥感生态指数是在4个生态指数的基础上通过主成分变换得出的一个评价生态环境质量的指标。因此,第二部分就是要分别计算出这4个指数的值。 ①首先,是绿度指数的计算,一般用归一化植被指数(NDVI) NDVI=(NIR-Red)/(NIR+Red) 在Bandmath工具中输入NDVI计算公式 (float(b4-b3))/(b4+b3) 其中,b3、b4分别是红波段和近红外波段 ②其次,是湿度计算。 WET = c1B1 + c2B2 + c3B3...

qq_41978498的博客 9万+

【MySQL系列】- binlog预防删库跑路

二进制日志包含描述数据库更改的“事件”,如表创建操作或表数据更改。

做一个有思想的技术人 1394

Linux音频处理实战:从MP3解码到ALSA播放的完整流程解析

本文详细解析了Linux环境下从MP3文件解码到通过ALSA播放音频的完整实战流程。文章深入剖析了MP3文件结构、PCM原始音频数据格式,并提供了使用ffmpeg/mpg123解码、以及利用ALSA库进行C语言编程播放的实用代码示例,帮助开发者彻底掌握Linux音频处理的核心链路。

weixin_29206669的博客 72

Binlog vs. Redo Log:数据库日志的较劲【基础】

本篇博客将引领你深入研究MySQL中的两个关键日志类型:Binlog和Redo Log。通过对比它们的功能、结构以及在数据库事务中的作用,你将更好地理解数据库引擎的运行机制,为优化性能和确保数据一致性打下坚实基础。

todoitbo的博客 5382

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活

本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。

weixin_30694389的博客 559

kaggle社区LLM Classification Finetuning

预测用户在一个由大型语言模型(LLMs)驱动的聊天机器人之间的正面交锋中会偏好哪些回应。获得来自聊天机器人竞技场(Chatbot Arena)的对话数据集,其中不同的LLMs对用户的提示生成答案。通过开发一个胜出的机器学习模型,帮助改进聊天机器人与人类的互动方式,并确保它们更好地符合人类的偏好。实际上是进行一个序列的分类。

m0_73542617的博客 1933

mysql开启binlog日志影响性能吗_mysql binlog日志优化及思路

在数据库安装完毕,对于binlog日志参数设置,有一些参数的调整,来满足业务需求或使性能最大化。Mysql日志主要对io性能产生影响,本次主要关注binlog 日志。查一下二进制日志相关的参数mysql> show variables like '%binlog%';+-----------------------------------------+--------------------...

weixin_31860973的博客 3496

NLP高频面试题(一)——Transformer的基本结构、作用和代码实现

本文详细介绍了Transformer模型的基本结构和PyTorch代码实现过程。首先解析了Transformer的核心组成部分,包括嵌入层、多头自注意力机制、位置编码、前馈神经网络、编码器和解码器等模块,并通过清晰的代码示例逐步展示了如何在PyTorch中构建完整的Transformer模型。文末提供了一个可运行的简单示例,帮助读者快速理解并实践Transformer的核心原理与实现方法。

WeLearnNLP 1026

Mysql 参数优化 sync_binlog innodb_flush_log_at_trx_commit

今天有一个业务需求,需要进行数据恢复操作,需要恢复到2021-07-11 15:21:00,大家应该都了解,这种基于时间点的恢复,首先通过物理备份将mysql全量恢复到异机中,然后再进行增量恢复binlog,从而实现基于时间点的恢复;然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。

jnrjian的博客 5846

SAP Business Technology Platform 支持的技术栈

SAP Business Technology Platform(简称 BTP)是 SAP 提供的一个综合技术平台,旨在帮助企业实现业务转型和创新。BTP 融合了数据库管理、应用开发、集成、分析和智能技术,为企业提供从基础架构到端到端应用的全面服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1568

【DRAM存储器四十七】LPDDR5介绍--LPDDR5的低功耗技术之DVFS

讲述LPDDR5的DVFSC和DVFSQ的工作原理和要求

highman110的博客 904

MYSQL BINLOG 越来越不重要,事务commmit 同步变异步 与 MYSQL RDS 实现

最近在学习POLARDB,阿里云的 MYSQL RDS 等产品,发现一个问题,BINLOG 一直在优化,并且有的系统将BINLOG 抛弃掉了,有的系统将BINLOG 的功能弱化了,优化了,提高了系统的性能,MYSQL RDS 在阿里云是在 8.025 这个版本就进行 BINLOG IN REDO 的优化。而我们的开源的MYSQL ,在这方面也跟上了 RDS 的脚步,基于...

sql server的专栏 537

从点击图标到Activity亮屏:AMS、Zygote、ActivityThread的Binder协作之旅

Launcher通过Context调用 startActivity(),最终会通过 Activity.startActivity() 传递到 ActivityManager.getService(),获取AMS的Binder代理对象(IActivityManager)。这里的 attach() 方法通过Binder调用AMS的 attachApplication(),将新进程的 IApplicationThread 代理对象传递给AMS。这一步的Binder通信,是整个启动流程的关键转折点,值得细细品味。

大模型大数据攻城狮的专栏 1071

mysql查看binlog日志

mysql查看binlog日志

awutongaxinwande的博客 511

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL binlog 日志保留策略

MySQL binlog日志保留策略是DBA必须掌握的关键知识。文章从binlog的作用(主从复制、数据恢复)入手,分析了不同MySQL版本的默认行为:5.6/5.7默认不清理,8.0默认保留30天。重点对比了两种参数:传统参数expire_logs_days(按天)和8.0新参数binlog_expire_logs_seconds(秒级精度)。最后给出实践建议:5.6/5.7设置7-14天,8.0推荐604800秒(7天),并提醒保留时间需考虑主从延迟和备份需求。

znfsw2008的专栏 484

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

洞悉MySQL的心跳:深入解析binlog与error log,掌握数据库运维的命脉

二进制日志(Binary Log),简称binlog,是MySQL用来记录所有更改数据库结构或内容(DDL/DML语句)事件的一种日志文件。它以二进制格式存储,并且可以用于复制、恢复以及审计追踪等多种场景。对于主从复制架构而言,binlog更是不可或缺的核心组件,因为从服务器正是通过读取并重放主服务器上的binlog来保持数据同步。

墨夶的博客 959

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL的二进制日志(binlog):数据复制的基石与数据恢复的救星

想象一下数据库的“黑匣子”——它忠实地记录着数据库中所有更改数据的操作指令,无论是一条简单的INSERT,还是一个影响数百万行数据的UPDATE,甚至是表结构的变更(DDL语句)。这个“黑匣子”就是binlog。核心特性:记录内容:它记录的是逻辑SQL语句或行更改前后镜像,而不是直接的数据页变化。这与物理日志有本质区别。记录范围:默认情况下,不记录不修改数据的操作,如SELECTSHOW等。它只关心“改变了什么”。格式多样。

用文字记录技术,用分享回馈社区,用坚持见证成长 890

MySQL 日志

MySQL 5.1.5 之前 binlog 的格式只有 STATEMENT,5.1.5 开始支持 ROW 格式的 binlog,从 5.1.8 版本开始,MySQL 开始支持 MIXED 格式的 binlog。对于InnoDB存储引擎而言,事务在执行过程中,会先把日志写入到binlog cache中,只有在事务提交的时候,才会把binlog cache中的日志持久化到磁盘上的binlog文件中。相比较于 Row 模式来说,Statement 模式下的日志文件更小,磁盘 IO 压力也较小,性能更好有些。

xmbcc777的博客 163

MySQL主从同步那点事儿

一、前言 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一

zhaorui2017的博客 731

如何构建企业级高可用数据库连接池:Go-MySQL的5大架构优势

Go-MySQL是一个纯Go语言实现的MySQL网络协议和复制处理库,专为构建高性能、高可用的数据库中间件和数据同步系统而设计。作为企业级数据库连接池和数据复制解决方案,该项目提供了完整的MySQL协议实现、binlog复制、连接池管理等核心功能,广泛应用于数据同步、数据库代理、实时数据分析等场景。🚀 ## 技术架构设计:模块化与可扩展性 Go-MySQL采用高度模块化的架构设计,将复杂的M

gitblog_00018的博客 438

mysql的主从复制+ canal监听mysql备库更新到es +logstash同步存量数据。

1、去主库的conf/my.cnf 编辑必要填的就这两个#[必须]启用二进制日志#[必须]服务器唯一ID(唯一即可)这个参数用来开启MySQL的GTID复制模式。GTID为每一个事务分配一个全局唯一的标识符,这样可以在主从服务器之间通过GTID而不是传统的日志文件和偏移量来进行复制同步,简化了复制拓扑的管理,增强了复制的透明性和一致性。在GTID模式下,所有的事务都会被赋予一个GTID,并记录在二进制日志中,使得在任何给定的服务器上,都可以通过GTID来确定哪些事务已经被执行过。

m0_48024020的博客 1365

MySQL 主从同步那点事儿

MySQL 主从同步那点事儿MySQL主从复制原理binlog简介1. binlog日志格式2. binlog日志内容3. binlog事件类型MySQL主从复制原理masterslave主从同步延迟 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同

unforgivenhg的博客 194

mysql 日志抓取变化_利用MySQL日志模拟恢复数据变化轨迹(上)

题记:先吐槽~~,这周末给屌丝哥(@应元)给废了。有这么一个需求,希望通过binlog去恢复数据库某个时间段内数据的变化情况。正文:先说一下为什么用binlog可以做这么一件事情。由于我们的binlog采用ROW模式,那么binlog会记录每一条数据所有列的变化信息,这些信息,我们就可以认为是一个数据源。首先,我们先看一下binlog,通过命令行mysqlbinlog –no-defaults -...

weixin_29863809的博客 209

mysql主从同步问题_聊聊 MySQL 主从同步那点事儿

原标题:聊聊 MySQL 主从同步那点事儿关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的...

weixin_39540744的博客 221

mysql 主从同步不一致_干货分享;MySQL主从同步那点事儿

欢迎关注我的头条号:Wooola,专注于Java、Golang、微服务架构,致力于每天分享快乐编码和开源技术。来源:linkedkeeper.com | 张岩一、前言关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会...

weixin_34816303的博客 202

[数据库]MYSQL主从同步

关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一下mysql主从...

疯一样的女子 205
上一篇: MySQL 未提交XA 事务如何处理?
下一篇: MySQL 主从时间字段相差1秒深度揭密
postgres20
博客等级 码龄10年 100粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值