企业运维训练营之数据库原理与实践—RDS常见问题排除及DAS自动弹性伸缩—RDS常见问题排除及DAS自动弹性伸缩(中)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 企业运维训练营之数据库原理与实践—RDS常见问题排除及DAS自动弹性伸缩—RDS常见问题排除及DAS自动弹性伸缩(中)

接上篇:https://developer.aliyun.com/article/1224222?spm=a2c6h.13148508.setting.14.15694f0ejOhNAoimage.png

 

数据库管理中经常会搭建从节点(只读节点)提供读请求给业务使用,减少主库的读压力。在使用只读实例的过程中会遇到延迟问题,如果在本地遇到延迟,如何定位延迟原因?如何快速恢复延迟?

 

主从复制的原理与开源MySQL一样,主库会通过Binlog dump线程推送日志,备库通过IO线程连接主库接收日志并写入relaylog,再由SQL线程应用relaylog,保持主从同步的关系。

 

对高可用版本实例备节点只提供高可用切换能力,并不提供读能力。如果要实现读写分离,需要单独购买只读实例,分担读请求。高可用的主备实例之间是双向复制的关系,只是从库不提供读写请求。开通只读实例的前提为RDS必须是高可用版或企业版。

 

如果备实例出现了复制延迟,一旦主节点挂了则无法切换到备节点做快速恢复。HA探测时也需要探测主备实例的延迟情况,延迟过大时不会做切换,除非有客户强制要求,不怕数据丢失,并且需要客户充分授权。

 

创建出来的只读实例与主实例时单向同步的关系,从高可用的master节点同步,并不是从备节点同步。如果发生了HA切换,只读节点也会重新调整复制关系,从新的主节点上保持同步。

 

另外,有些客户通过Flink消费主实例的Binlog,可能会出现空间打满的情况。因为RDS实例也有清理本地日志空间的功能,如果有其他线程占用Binlog,会导致清理线程无法将Binlog清理掉,很可能导致主实例的空间不断增加,直至打满。因此,如果平常有通过第三方的工具消费主实例的Binlog,需要注意此类情况。

 

上图列出了导致延迟的高频原因:

 

只读实例规格小:CPU或内存比主实例规格小时,很可能会成为瓶颈,影响复制

 

只读实例规格负载比较高:如果出现很多慢查询,会将只读实例的CPU打满,使复制线程受到影响,导致复制延迟的情况

 

大事务:大事务会导致额外的风险,比如踩到BUG,此时又出现备库延迟导致无法切换,对业务造成损失,因此,建议尽量将大事务拆分成小事务的操作。

 

锁阻塞:比如做DDL变更,主实例上不一定有元数据锁阻塞出现,但是当DDL语句在只读实例上应用时,如果在应用之前有长的只读查询,会导致DDL变更始终无法得到元数据锁,造成全局阻塞。因此在主实例上做完DDL之后,也需要关注只读实例是否出现元数据锁阻塞的情况。

 

表无主键:对表做操作时,对于只读实例来说是基于全表扫描的方式做更新删除,表没有主键则性能会急剧下降。因此在开发规范里面需要明确为开发人员定义好规则,表必须设置主键。

 

参数设置:比如Mysql开启innodb_adaptive_hash_index自适应哈希索引,只读实例应用DDL变更之后,需要清理内存中的自适应哈性索引。此时全局锁可能会导致实例短暂夯住,复制延迟的情况也有可能出现。因此,一般建议实例上将参数置为off

 

表结构设计:不建议在数据库侧将表设计成带有唯一索引,而是通过业务来保持索引的唯一性。

 

高可用版会在后台创建容灾的只读实例。如果提供业务访问的只读实例挂掉,可以快速换到备用只读进行恢复,对于延迟场景有一定的帮助。对延迟的场景,备用只读实例不提供业务访问,遇到大事务时如果急于恢复,可以找我们确认,比如备用只读实例是否已经没有延迟,如果没有延迟则可以快速切到备用只读上做恢复。但是需要注意,切换时会有连接闪断。

 

另一种快速恢复的方式直接重建只读实例,但是需要保证开始重建不能再有大事务产生,否则会导致重建完应用增量Binlog时,大事务语句应用时间依然比较久。克隆时间受限于比如是本地盘实例还是云盘实例、数据量的大小等因素因素。ESSD云盘能够快速克隆实例,一般1T、2 T大小仅需半小时。因此,如果对网络时间要求不是特别高的场景,一般建议首先选择ESSD云盘类型的实例。

 

可以在读写分离的地址上配置延迟阈值,超过阈值之后,新的请求不会再分给超过延迟阈值的只读节点。如果所有只读节点的延迟都很大,则请求可能会全部分发给主实例,需要关注主实例是否能够承受。

 

image.png

 

针对大事务或元数据锁阻塞,可以执行show slave status\G来查看。

 

重点关注应用的GTID位点是否卡在某位点上。再通过show processlist查看是否存在元数据锁阻塞,如果没有,则可以往大事务的方向排查。

 

排查大事务时,主要关注事务的开始时间与会话状态。如果出现fetching rows,则建议查看慢日志对应时间点的操作情况。如果想要确认哪一类操作影响比较多,可以通过 show global status like “Innodb_rows_%”来确认,帮助过滤慢日志时更高效地找到具体方向。

 

确认了影响较大的行为后,再通过慢日志,洞察日志,解析相应的binlog、查看表结构、查看是否有主键等快速确认问题。

 

image.png

数据库自治服务DAS提供了异常检测功能,基于机器学习和细粒度的监控数据,可以通过比如CPU、IOPS、活跃会话监控异常,对于生产环境RDS,我们可以开通SQL洞察,这样DAS可以结合SQL洞察日志综合进行分析。

 

相比于传统的基于阈值方式的异常告警检测,DAS的异常检测准确性与时效性都显著优于传统方式。DAS检测到异常时,可以做特征提取、根因分析,还可以做自动SQL优化,kill异常SQL、自动添加索引,评估SQL优化后的效果,实现全闭环的链路。

 

传统方式下,CPU打满时很多平常执行不慢的SQL会被拖慢,此时慢日志里记录了大量慢SQL,通过记录下CPU等指标打高时的慢SQL来进行根因追溯,该过程效率极低。

 

而DAS提供的异常检测功能可以在比如CPU等指标飙高时,保存此刻的会话,通过会话结合保留的慢日志和洞察日志,快速分析哪些SQL开销较高,方便快速定位到引起问题的SQL。

 

image.png

 

毛刺、周期性、趋势、均值便宜、新增等问题均能通过DAS进行检测。

 

比如类似于OOM的场景,可能执行了SQL之后,内存可能有缓慢上升。

 

开通SQL洞察后,如果某条SQL引起了OOM,MySQL进程直接挂掉,会导致来不及记录引起问题的SQL,此时如果要追溯,可以通过异常检测来实现。

 

image.png

 

DAS提供了一键诊断的功能,在自治中心可以选择某个时间段内的异常事件进行查看,点击可进入详情页。


接下篇:https://developer.aliyun.com/article/1224219?spm=a2c6h.13148508.setting.16.15694f0ejOhNAo

相关文章
|
1月前
|
人工智能 运维 负载均衡
智能运维新时代:AI在云资源管理中的应用与实践
智能运维新时代:AI在云资源管理中的应用与实践
195 23
|
1月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
73 9
|
1月前
|
存储 弹性计算 运维
云端问道 7 期实践教学-使用操作系统智能助手 OS Copilot 轻松运维与编程
使用操作系统智能助手 OS Copilot 轻松运维与编程
62 14
|
2月前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
66 0
|
24天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
11天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
86 42
|
2天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
40 25
|
29天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
240 0
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
73 3
|
2月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
122 3

热门文章

最新文章