MySQL 8复制性能的增强

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/79431533 MySQL 8复制性能的增强2018.3.3版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/79431533

MySQL 8复制性能的增强

  • 2018.3.3
  • 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。

MySQL从5.7版发布后没多久,其8.0版本的开发就提上了日程。MySQL在编号方面跳跃了几个版本,6.0被直接丢弃,7.0被保留用于MySQL的集群版本,因为Oracle官方认为,MySQL 5.6版就相当于6.0版,5.7版就相当于7.0版,因此作为5.7版的下一个版本,直接命名为8.0版也就可以理解了。8.0版这个新版本有许多改变(和bug修复),其中最令人兴奋的是复制性能的增强。本文将概述复制性能增强的特性,包括新增的复制时间戳、性能模式表报告的其他信息,以及通过更新复制线程之间的关系以降低复制延迟的效率,从而降低复制延迟。

新的复制时间戳

管理复制过程中最常见的任务是确保实际上正在发生的复制的顺利进行,并且从设备与主设备之间没有错误。使用的主要语句是“SHOW SLAVE STATUS”,它提供了有关从线程的基本参数的状态信息。因此,必须在每个从设备上执行它。以下是一个输出示例:

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: localhost
                  Master_User: root
                  Master_Port: 13000
                Connect_Retry: 60
              Master_Log_File: master-bin.000002
          Read_Master_Log_Pos: 1307
               Relay_Log_File: slave-relay-bin.000003
                Relay_Log_Pos: 1508
        Relay_Master_Log_File: master-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
           /   *   /   *   /   *   /
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
                ETC...

其中一个输出度量是Seconds_Behind_Master。虽然这完全适用于简单的主从设置,但此度量标准不适合更复杂的复制场景。Seconds_Behind_Master度量有四个主要缺点:

  1. 它只报告从设备和最高层主设备之间的延迟。例如,在链式复制设置中,Seconds_Behind_Master只报告相对于原始主设备的延迟,而不提供任何关于从设备与其最近的中间层注设备之间的延迟的信息。
  2. 它与原始主设备的时区相关。因此,跨时区的服务器的复制会导致测量的延迟被两台服务器之间的时区差异所抵消。
  3. 根据语句的执行开始时间,以每个事件为基础测量延迟。从事务处理实际发生在主事务处理的时间起,更具有洞察力的措施将是每笔事务处理。
  4. 用于度量复制延迟的时间戳只能提供精确到最近的秒数。

MySQL 8引入了两个新的时间戳,这些时间戳Seconds_Behind_Master在规避上述问题时补充了度量标准。这些时间戳与每个事务的全局事务标识符(GTID)相关联(与每个事件相对),写入二进制日志。GTID是创建的唯一标识符,并与源(主)服务器上提交的每个事务相关联。此标识符不仅是其源自的服务器,而且是给定复制设置中的所有服务器的唯一标识符。与事务处理相关联,所有事务处理和所有GTID之间存在1对1的映射关系。

这两个新的时间戳是:

  • 原始提交时间戳(OCT,Original Commit Timestamp):将事务写入原始主服务器的二进制日志时的微秒数(起始时间为1970-01-01T00:00:00Z)
  • 即时提交时间戳(ICT,Immediate Commit Timestamp):事务处理写入即时主机的二进制日志花销的微秒数

mysqlbinlog以两种格式显示新的时间戳:

  1. 微秒数
  2. 在用户时区的TIMESTAMP格式(为了更好的可读性)

从设备的二进制日志中的这段代码显示了两个时间戳:

#170404 10:48:05 server id 1  end_log_pos 233 CRC32 0x016ce647     GTID    
last_committed=0    sequence_number=1    
original_committed_timestamp=1491299285661130    
immediate_commit_timestamp=1491299285843771
# original_commit_timestamp=1491299285661130 (2018-01-04 10:48:05.661130 WEST)
# immediate_commit_timestamp=1491299285843771 (2018-01-04 10:48:05.843771 WEST)
/*!80001 SET @@session.original_commit_timestamp=1491299285661130*//*!*/;
SET @@SESSION.GTID_NEXT= 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'/*!*/;
# at 288

性能模式表报告的新信息

MySQL 8.0对性能模式进行了一些更改,从而获得更好的性能信息和更多的指标信息:

  1. 可以检测服务器错误
  2. 现在支持索引
  3. 可以向现有的性能模式复制状态表添加新的字段

下面详细地探讨这些内容。

检测服务器错误

MySQL 8引入了五个新的汇总表来帮助处理服务器错误,包括:

  • events_errors_summary_by_account_by_error
  • events_errors_summary_by_host_by_error
  • events_errors_summary_by_thread_by_error
  • events_errors_summary_by_user_by_error
  • events_errors_summary_global_by_error

在所有上述表中,错误统计数据都会被错误汇总。此外,除了events_errors_summary_global_by_error之外,每个表都存储与特定用户、主机、帐户或线程相关的错误;events_errors_summary_global_by_error包含整个服务器的错误。

表结构

每个表都包含以下字段:

+-------------------+---------------------+------+-----+---------------------+
| Field             | Type                | Null | Key | Default             |
+-------------------+---------------------+------+-----+---------------------+
| ERROR_NUMBER      | int(11)             | YES  |     | NULL                |
| ERROR_NAME        | varchar(64)         | YES  |     | NULL                |
| SQL_STATE         | varchar(5)          | YES  |     | NULL                |
| SUM_ERROR_RAISED  | bigint(20) unsigned | NO   |     | NULL                |
| SUM_ERROR_HANDLED | bigint(20) unsigned | NO   |     | NULL                |
| FIRST_SEEN        | timestamp           | YES  |     | 0000-00-00 00:00:00 |
| LAST_SEEN         | timestamp           | YES  |     | 0000-00-00 00:00:00 |
+-------------------+---------------------+------+-----+---------------------+

注意:

  • FIRST_SEEN/LAST_SEEN列字段表示第一次和最后一次看到的特定错误。
  • SUM_ERROR_RAISED列字段列出了引发特定错误的次数。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
15 4
|
1月前
|
Kubernetes Cloud Native 关系型数据库
提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
【4月更文挑战第9天】提升数据安全与性能,掌握Helm一键部署MySQL 8.0主从技巧
53 0
|
3月前
|
安全 关系型数据库 MySQL
mysql安全性能
mysql安全性能
42 10
|
4月前
|
缓存 关系型数据库 MySQL
如何优化MySQL性能
对于使用MySQL数据库的开发人员来说,优化数据库性能是一个非常重要的任务。本文将介绍一些优化MySQL性能的方法,包括索引优化、查询优化、硬件升级等方面,帮助开发人员提高应用程序的性能和响应速度。
115 0
|
4月前
|
关系型数据库 MySQL Serverless
阿里云云原生数据库 PolarDB MySQL Serverless:卓越的性能与无与伦比的弹性
阿里云原生数据库 PolarDB MySQL Serverless 拥有卓越性能和无与伦比的弹性。通过实验体验,深入了解其基本管理和配置、智能弹性伸缩特性和全局一致性特性。实验包括主节点和只读节点的弹性压测以及全局一致性测试,旨在亲身体验 PolarDB 的强大性能。通过实验,可以更好地在实际业务场景中应用 PolarDB,并根据需求进行性能优化和调整。
690 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
1月前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
3天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
5天前
|
存储 SQL 关系型数据库
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
以小白的视角探究MySQL索引条件下推ICP的优化,其中包括server层与存储引擎层如何交互、索引、回表、ICP等内容
MySQL的优化利器⭐️索引条件下推,千万数据下性能提升273%🚀
|
6天前
|
存储 关系型数据库 MySQL
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀
本篇文章来讨论MySQL字段的字符类型选择并深入实践char与varchar类型的区别以及在千万数据下的性能测试
MySQL字段的字符类型该如何选择?千万数据下varchar和char性能竟然相差30%🚀

推荐镜像

更多