热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL集群优化的0.4毫秒逻辑分析

这是学习笔记的第 2346

这是学习笔记的第 2346篇文章

  

  最近做了一个集群服务的在线切换,将原来的主从环境做了切换,当然后端的处理工作是比较复杂的,涉及到主从服务器的在线迁移和硬件变更。

  总体来说,切换后的读延迟比原本降低了0.4毫秒左右,对于一个延迟季度敏感的业务来说,0.4毫秒是一个很高的比例,按照既定的比例规则,差不多是优化了25-30%的比例。

  那么这省下来的0.4毫秒到底优化在哪个环节了呢?我们做了一些讨论和分析,不仅暗暗感叹,幸亏是优化了,如果延迟变大30%,要快速分析还是压力很大的。

  这个问题分析的难点在于存在一系列的动态变量,导致服务切换前后的对比缺少了一些基准和衡量标准。

 我们简单提炼了下,在服务切换前的优化工作有:

1)新从库采用了全新的硬件配置,CPU型号更高,性能提升可达30%

2)主从库采用的SATA-SSD的存储使用了不同品牌

3)主从切换前,在从库中对数据表进行了全面的碎片清理

4)原本服务器的系统盘是使用SAS的,在新从库中统一按照SATA-SSD类配置

5)中间件服务器有近2年没有重启过,这次维护做了重启维护

此外,还有一些不确定的因素,比如业务量的差异等,按照100%对等的标准是不大可能完全对等去分析的,所以我们试着通过如下的逻辑进行分析。 

初步来看,我们觉得对于数据表做了碎片清理,这个改进的效果会比较高,因为碎片率在切换前统计是近20%,清理后空间释放了近20%,本来认为这样的一套指标体系是比较演进的,但是在对比了近几天的业务延迟情况之后,有一个业务的数据是说不通的。

我们假设是业务2,业务2的数据表示日表,也就意味着这张表没有所谓的碎片,因为每天都会有一张新的数据表写入数据。所以业务2的延迟应该没有变化或者有细小的差异才说得通,但是在这里可以很清楚的看到,延迟是有近30%的提升,这就说不通了,所以单纯的碎片清理带来的收益确实没有期望那么高。

 

我们分析下系统负载的情况,随机选择了一个分片节点,查看了切换前和切换后的负载数据。

切换前

切换后

总体来说,负载的平均值是提高了0.03,这个比例是很低的一个比例,姑且认为是可以忽略的。

再来看看CPU的使用率,因为新的服务器CPU性能提升近30%,所以对负载情况进行了整体的比对,可以发现这个业务不是强计算相关的,所以CPU配置再好,在这里带来的收益确实没有期望那么明显。

切换后

切换前

接着来看磁盘,磁盘层面有很多的指标,我们来看下util指标:

切换后:

切换前:

总体切换后的util从16%提高到了18%,很难可以给出一个客观的结论。

对于磁盘读写层面的分析,可以看到等待的延迟部分不是一个数量级。

切换后

切换前

在这里可能会有一个误区,那就是切换前的指标是精确度不够,是0,我们可把指标放大,即选择其中一个指标,就可以看到右侧的指标的相对精确的数据了。

                                                     切换后:

切换前:

到了这里,我们可以看到延迟的指标对于逻辑卷和不同分区的差别还是很明显的,虽然单个指标的提升在10%左右,但是所有的指标都是略高一筹。

当然碎片整理确实是有提高,但是和磁盘层面的提升来说,占比确实没有那么高。 

而接下来的问题就是进一步验证,需要分析不同SSD产品间的一些差异和稳定性测试数据。 

总体来说,整个分析的过程可以提供一种分析的思路,而不仅仅是得到的初步结论。 

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记
  • Github:@jeanron100
  • CSDN:@jeanron100
  • 知乎:@jeanron100
  • 头条号:@杨建荣的学习笔记
  • 网易号:@杨建荣的数据库笔记
  • 大鱼号:@杨建荣的数据库笔记
  • 腾讯云+社区:@杨建荣的学习笔记

近期热文:

我们为什么在MySQL中几乎不使用分区表

新年大吉 总结了如下的感想

《大江大河2》最触动我的一段经典对话

MySQL 8.0给开发方向带来的一些困扰

迁移到MySQL的业务架构演进实战

MySQL业务双活的初步设计方案

如何优化MySQL千万级大表,我写了6000字的解读

一道经典的MySQL面试题,答案出现三次反转

小白学MySQL要多久?我整理了10多个问题的答案

转载热文:

2020年度20多款主流数据库重大更新及技术要点回顾

工行“去O”数据库选型与分布式架构设计

MySQL 实战笔记 第01期:MySQL 角色管理

MGR用哪个版本?5.7 vs 8.0

SQLcl这个可爱的小工具,来了解一下呀~

CPU占用又爆了?MySQL到底在干什么

这个MySQL优化原理剖析,比照X光还清楚

自己动手写SQL执行引擎

最受欢迎的微服务框架概览

程序员,保住你的钱袋子!

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过


在看,让更多人看到



推荐阅读
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
author-avatar
文武2602897197
这个家伙很懒,什么也没留下!
RankList | 热门文章