上云无忧 > 文档中心 > 百度智能云云数据库RDS使用代理和只读解决负载过高的问题
云数据库 RDS
百度智能云云数据库RDS使用代理和只读解决负载过高的问题

文档简介:
在数据库的使用过程中,随着流量的不断增长,需要对RDS实例进行扩容以满足高并发的性能要求,扩容方案一般情况下分为如下两类: 纵向扩展(Scale-Up)方案:升级RDS实例的套餐规格,通过增加CPU和内存的配置,提升数据库性能。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

概述

在数据库的使用过程中,随着流量的不断增长,需要对RDS实例进行扩容以满足高并发的性能要求,扩容方案一般情况下分为如下两类:

  • 纵向扩展(Scale-Up)方案:升级RDS实例的套餐规格,通过增加CPU和内存的配置,提升数据库性能
  • 横向扩展(Scale-Out)方案:借助MySQL主从同步特性,通过增加RDS只读实例,构建一主多从的数据库架构,进而提升RDS的性能和容量。

本文重点讲述横向扩展方案的最佳实践。

适用场景

如何如下特征的数据库适合采用横向扩展方案——

  • 当前RDS实例流量较大,实例负载较高,MySQL慢日志中存在大量的只读SQL请求
  • SQL读写比较高:读SQL占比越高,横向扩展方案的效果越好
  • SQL存在OLAP类型的查询(如统计查询、BI分析查询、批量查询):基于流量隔离思路,把长耗时的SQL单独访问只读实例,避免影响正常的实时流量
  • 预计未来数据库读SQL请求量会快速增长

操作步骤

  • 第一步:创建只读实例:创建只读实例前需要先创建好标准实例,进入标准实例控制台即可选择创建只读实例
  • 第二步:创建代理实例:创建代理实例前需要先创建好标准实例,进入标准实例控制台即可选择创建代理实例,每个RDS标准实例仅能创建一个代理实例(代理实例的节点数可按需扩展) 
  • 第三步:创建代理实例专有账号:连接到云数据库RDS代理实例,需使用代理实例专有账号、密码;创建代理实例专有账号的同时,将自动将该账号同步到主实例
  • 第四步:将代理实例的IP/域名、端口、账号、密码配置到应用程序代码中
  • 第五步:在代理实例中设置承担读流量和读流量权重 

【参考资料】只读实例和代理实例操作指南

案例演示

问题现象

某客户RDS实例,由于业务增长过快,RDS实例读写流量增长迅速,导致RDS实例负载较高,CPU使用率达到85%以上: 

原因分析

客户工单联系百度云售后技术支持介入解决,经过仔细分析,发现数据库实例存在如下特征:

  • 读写比例5:1
  • 读SQL消耗了大量的主实例资源
  • 后续预计流量还会持续增长,读写比保持5:1

解决方案

建议客户采用横向扩展(Scale-Out)方案,添加代理实例实现流量调度和读写分离,添加只读实例承载读SQL请求,扩容后的架构如下图示:

优化效果

  • 代理实例对流量分流,主实例负载得到缓解,cpu占用率降低到了21%,降低到原来的1/4 

注意事项

  • 建议客户预估流量上涨趋势,提前创建代理实例和只读实例,并更改程序配置信息使用代理实例
  • 写入并发导致负载较高建议升级配置或者使用DRDS产品
  • 代理实例使用存在一定限制条件,请参考:代理实例使用限制
相似文档
  • 在数据库的使用过程中,如果遇到误操作导致的数据删除、数据篡改等问题,可以通过RDS克隆实例功能实现数据修复。克隆实例的数据恢复方式分为如下两种: for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 读写分离原则: 事务、写请求或同一个session写请求之后一段时间(默认200ms)内的读,会发往主库。 读写分离不保证非事务读的一致性,业务上有一致性需求的查询,请封装到事务。 对业务要求: 业务有连接探活或超时机制。超时时间为:前端超时时间 < 代理超时时间 < MySQL超时时间。 业务端有重试机制。 for MySQL 版 for SQL Server 版 for PostgreSQL 版
  • 在生产环境中,经常会遇到这样的情况:客户在主实例对一个没有索引的表执行大批量数据的update或delete操作。如果主从采用ROW模式复制,主库只需要全表扫描一次,从库却需要对主库影响的每一行数据都做一次全表扫描,往往会造成从库非常大的同步延迟,这种情况一般不能被业务所容忍。 for MySQL 版
  • DBA在运维数据库的过程中,常常会有这样的烦恼:InnoDB存储引擎的共享表空间文件ibdata1逐步增大,更严重甚至将磁盘打满影响服务。 此篇文章主要围绕两个问题进行分析: ibdata1文件为什么会增大? ibdata1文件在同集群的主从库间并不一定同步增长? for MySQL 版
  • MySQL在5.7版本中提供了Generated Column的功能,它可以通过函数计算获得新的一列数据,我们可以通过在虚拟列加索引的方式提高查询效率、分区表可使用虚拟列进行分区等。 for MySQL 版
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部