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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 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

相关文章
|
2月前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
1月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
167 42
|
24天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
124 25
|
11天前
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
11天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
19天前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
2月前
|
运维 关系型数据库 MySQL
体验领礼啦!体验自建数据库迁移到阿里云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」上线!本方案介绍如何将自建数据库平滑迁移至云数据库RDS,解决业务增长带来的运维难题。通过使用RDS MySQL,您可获得稳定、可靠和安全的企业级数据库服务,专注于核心业务发展。完成任务即可领取桌面置物架,每个工作日限量50个,先到先得。
|
2月前
|
关系型数据库 OLAP 分布式数据库
瑶池数据库微课堂|PolarDB/RDS+ADB Zero-ETL:一种免费、易用、高效的数据同步方式
瑶池数据库微课堂介绍阿里云PolarDB/RDS与ADB的Zero-ETL功能,实现免费、易用、高效的数据同步。内容涵盖OLTP与OLAP的区别、传统ETL存在的问题及Zero-ETL的优势(零成本、高效同步),并演示了从RDS MySQL到AnalyticDB MySQL的具体操作步骤。未来将优化和迭代此功能,提供更好的用户体验。
|
2月前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
491 0
|
3月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
90 3

热门文章

最新文章