【案例】复制静止问题一则

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:
一背景
  早上7点多接到一个数据库服务器空间报警,磁盘空间不足。登陆数据库查看,MySQL slave 大量延迟,有68G 的relay log。查看slave status 发现Relay_Log_Pos ,Exec_Master_Log_Pos  位点始终不变,当时的状态展示如下:
二 分析
根据slave 复制的原理可知  relay_log_pos 是指sql_thread 进程读取relay log文件的位点,exec_master_log_pos是sql_thread 执行relay log中相对于 主库master binlog file的位点。那为什么sql_thread 一直显示静止状态呢?
我们如下几个方面思考 
1 主机的 IO层面,是否是服务器的io能力不足导致的呢?

从结果上看IO利用率极低,不可能导致sql_thread执行缓慢的或者静止的。 

2 sql_thread 等待MySQL的MDL锁,或者备份的flus table with read lock 等常见的所等待 
登陆数据库查看 ,备库无任何业务连接,也没有备份在进行。因此可以排除MySQL 锁层面的问题。 

使用 pt-pmp工具查看数据库进程此时的状态,能否获得一些线索

从pt-pmp执行结果上来看,注意 execute_command, reader_loop 函数,说明数据库一直在执行sql语句,只是执行的比较缓慢,循环读取relay log中的event 。我们进一步将问题范围缩小。

3 分析有没有大事务,全表delete 等,sql_thread将主库的log event重新再备库上执行一遍,遇到全表delete /update且表结构设计不合理导致sql_thread 执行极其缓慢
使用工具分析当前relaylog 具体执行什么事务?
mysqlbinlog  ../mysql/relay-bin.000421  --start-position=233450854 > relay.log

果然是有大事务--大批量的delete操作,查询数据库该表有1200w左右的记录,无主键( 在这里给无专职DBA的公司开发提个醒,所有的表务必要创建主键)且没有任何索引。至此问题的原因找到了,那么如何解决呢?
可以参考的解决方法有
  1. 1 提高数据库的写速度。
  2.   set global sync_binlog=0
  3.   set global innodb_log_flush_at_trx_commit=0;

  4. 2 在从库给表添加索引
  5. set session sql_log_bin=0;
  6. alter table xxx add key idx_curday(current_day)
实际过程中该问题于晚上22点左右将延迟的relaylog应用完毕,该服务器的磁盘为sas 机械盘,io能力较差。如果更换为SSD 存储介质应该会更快一些。各位读者朋友如果还有其他想法,可以留言相互交流提供更好的解决方法。
三 小结
   主从复制结构是大家常用的MySQL 高可用的方案,但是往往由于各种因素,表结构设计不合理,主库大量写,从库备份等原因导致slave延迟,影响整体的可用性。MySQL DBA 一定要仔细review 数据库表结构设计,杜绝这类延迟隐患发生。关于slave 延迟问题,推荐之前写的拙作 《 常见slave 延迟原因以及解决方法 》。
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 数据库
【案例】复制静止问题一则
一背景   早上7点多接到一个数据库服务器空间报警,磁盘空间不足。登陆数据库查看,MySQL slave 大量延迟,有68G 的relay log。查看slave status 发现Relay_Log_Pos ,Exec_Master_Log_Pos  位点始终不变...
1683 0
|
1月前
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
134 94
演示大事物导致复制延时
演示大事物导致复制延时 master: #主库开始一个大事物等待结束传送到从库上: root@localhost [employees]>alter table salaries engine=innodb; Query OK, 0 rows affected (24.
606 0
|
9月前
|
索引
消除游戏中图标下落的原理和实现
消除游戏中图标下落的原理和实现
64 1
|
4月前
ThreeJs动态复制物体
这篇文章介绍了如何在Three.js中实现3D物体的动态复制,并提供了通过鼠标操作来复制模型的具体实现方法。
49 1
以动画形式回放飓风数据
以动画形式回放飓风数据
107 0
|
编译器
C++Primer笔记之复制控制
复制控制这一节需要注意的地方不多,主要有以下几点: 1、定义自己的复制构造函数 什么时候需要定义自己的复制构造函数,而不用系统提供的,主要遵循以下的经验说明: 某些类必须对复制对象时发生的事情加以控制,这样的类(1)经常有一个数据成员是指针,(2)有成员在构造函数中分配的其他资源; 而另一些类在创建对象时必须做一些特定的工作。
1016 0
复制一个5G文件只需要两秒,全网最牛方法!
复制一个5G文件只需要两秒,全网最牛方法!

热门文章

最新文章