滚动新闻 →
美国最高法院如何解释宪法 中国存储巨头长鑫科技股价跳水 市值跌破3万亿 波瓦坦联盟与弗吉尼亚早期历史 AI 模型发布流程如何与 CI/CD 结合,从代码提交到 GPU 推理服务上线完整梳理 中国失业率攀升 “烂尾娃”与 “新型啃老”倍增 堪萨斯州一汽车冲入足球场 酿2死多伤 四川统战部长缺席多个重要会议 网传嫖娼被抓现行 女演员吴越自曝遭AI盗脸带货 发文怒斥“太恶劣” 浙江23岁男子无收入 报复社会杀害陌生女子 女子45万爱马仕包寄丢 深圳法院判赔500元引热议 Cloud SQL Read Replica 是什么,数据库读压力增加后可以怎样扩展 不要让 Cron 每分钟扫描整张表,SaaS 定时任务如何提高效率 笔记本电脑显示正在充电但电量不增加,常见硬件原因有哪些 卢比奥抵达乌兹别克 C5+1峰会后将访问印度 乌军逾千架无人机袭击俄罗斯 石油设施陷火海 Windows 11 详细信息窗格怎么使用?查看文件属性更加方便 MySQL 事务是什么?COMMIT、ROLLBACK 和数据一致性基础 李清照为什么成为中国文学史上重要的女性词人 荷叶与中国传统饮食文化 浓墨、淡墨、枯墨和湿墨有什么区别 如何教育孩子在集体活动中考虑大家 英媒:咨询巨头埃森哲寻求出售中国业务 普通用户应该如何理解视频编码 安史之乱为什么会改变唐朝历史 旧房墙面出现问题应该如何判断是否需要处理 泡菜文化为什么在亚洲很多地区都很重要 想看真正的落基山秋色,可以把几天时间留给加拿大幽鹤国家公园 汽车启动时只听到咔嗒声怎么办 美国出手 贝森特要求世银停止对中国放贷 黄奇帆落马后中纪委发声 专家析背后内情 川普支持内塔尼亚胡连任以色列总理 半固态电池和固态电池有什么区别 加拿大买房除了首付还需要准备哪些费用 10月18日维权动态 中共五中全会前维稳升级 敏感人士遭监控 中国车录下挪威军演敏感信息 加剧安全担忧 每个月存钱为什么比偶尔存一大笔钱更重要 购买豪华游艇除了船价还需要承担哪些费用 卢比奥否认白宫干预星链网速 乌盼获星盾 卢比奥:暂缓对俄制裁60天 评估全球经济影响 德国莱比锡机场再爆安全事件 疑有车辆闯入

Cloud SQL Read Replica 是什么,数据库读压力增加后可以怎样扩展

发布时间: 2026-10-18 21:00:02    最后更新: 2026-10-18 22:30:31    阅读:8  约11 分钟阅读     

Cloud SQL Read Replica 是什么,数据库读压力增加后可以怎样扩展
图片说明:示意图   图片来源:Public Domain(公有领域)
当一个应用从几百个用户增长到数万甚至更多并发请求时,数据库最先遇到的问题往往不是存储空间不够,而是读请求越来越多。首页查询、商品列表、用户资料、报表接口以及后台管理系统都会不断向数据库发起SELECT请求。如果所有读写操作都集中在同一个数据库实例上,即使CPU和内存配置已经很高,也可能因为连接数、磁盘I/O和查询并发度达到瓶颈。

Google Cloud的Cloud SQL提供了Read Replica,也就是只读副本,可以把主数据库产生的数据异步复制到一个或多个副本实例,让应用把部分读取请求转移到副本,从而形成基本的读写分离架构。

Cloud SQL Read Replica到底是什么

Read Replica并不是一个独立的数据源,也不是简单地把数据库复制一份之后完全脱离主库运行。它通常通过数据库引擎提供的复制机制,从Primary Instance持续接收并应用变更。

应用仍然把INSERT、UPDATE、DELETE等写操作发送到主实例,而SELECT等可以接受一定数据延迟的读取请求,则可以发送到Read Replica。

因此,一个典型架构可以表示为:

应用 → Primary Instance → 写操作

应用 → Read Replica 1 → 读操作

应用 → Read Replica 2 → 读操作

应用 → Read Replica 3 → 读操作

这种架构最适合读多写少的业务。如果一个网站的大部分请求都是读取数据库,而写入比例相对较低,那么增加Read Replica可以把读取压力分散到多个数据库实例。

但Read Replica并不能直接解决所有数据库瓶颈。如果真正的瓶颈是写入能力、锁竞争、单条SQL执行时间或者主实例磁盘性能,那么单纯增加只读副本不会让问题消失。

Read Replica最大的特点是异步复制

设计读写分离架构时,最容易被忽略的问题就是复制延迟。

主数据库提交了一笔新的数据之后,Read Replica需要经过复制、传输和应用过程才能看到这笔变化。因此,副本中的数据可能暂时落后于Primary。

例如用户刚刚修改了账户资料,随后立即刷新页面。如果下一次读取请求被路由到一个存在复制延迟的Read Replica,应用可能暂时看到旧数据。

这就是典型的read-after-write问题。

因此,不能简单地把所有SELECT都无条件发送到Read Replica。对于用户刚刚提交的数据、支付状态、订单状态或者其他要求立即读取最新结果的操作,通常仍然应该从Primary读取,或者由应用建立明确的一致性策略。

应用层必须真正实现读写分离

创建Read Replica只是基础设施层面的第一步,真正决定它能不能发挥作用的是应用程序。

数据库连接池需要知道哪些连接用于写操作,哪些连接用于读取。例如应用可以维护Primary连接池和Replica连接池,写事务固定使用Primary,而普通查询根据负载情况发送到Replica。

如果应用所有SQL最终仍然连接Primary,那么创建十个Read Replica也没有意义。

更复杂的系统还需要根据查询类型进行路由。例如用户登录后的账户信息、订单确认页面等对最新数据敏感的查询可以进入Primary;公共内容、搜索结果、产品目录等允许存在短暂延迟的查询,则可以进入Read Replica。

这种路由逻辑最好由应用框架、数据库访问层或者专门的数据库代理统一管理,而不是让开发人员在每个SQL语句中手工决定连接哪个数据库。

增加Read Replica并不等于无限扩容

当一个Read Replica已经接近CPU、内存或者磁盘I/O瓶颈时,可以继续增加其他Replica,把读取请求进一步分散。

例如原来所有读取都进入Primary,随后增加两个Replica,就可以形成三个读取目标。随着业务增长,还可以继续增加副本。

但这里存在一个重要限制:Read Replica解决的是读扩展,而不是写扩展。

所有写操作最终仍然需要进入Primary以及其复制链路。如果应用的主要瓶颈已经转变成INSERT、UPDATE、DELETE吞吐量,那么继续增加Replica不会解决核心问题。

此外,副本数量增加以后,复制链路、网络流量、监控复杂度以及数据库实例成本也会同步增加。因此,扩容之前应该先确认瓶颈究竟发生在Primary的CPU、内存、磁盘I/O、连接数,还是SQL本身。

不要把慢查询直接交给Read Replica

很多数据库系统在性能下降以后,会产生一个非常自然的想法:把慢查询全部放到Read Replica。

这只能解决部分问题。

如果一个查询本身需要扫描数百万甚至数千万行数据,那么它放到Replica以后,只是从“Primary很慢”变成“Replica很慢”。如果多个报表同时执行大型JOIN、排序或者聚合操作,副本同样会出现CPU和I/O竞争。

因此,在增加副本之前,通常应该先检查慢查询日志、执行计划、索引设计以及查询返回的数据量。

一个正确的索引或者一次SQL重写,有时能够减少大量数据库负载,而不需要增加新的数据库实例。

跨区域Read Replica解决的不只是读取问题

对于需要跨区域部署的应用,可以考虑将Read Replica部署到其他区域,让距离用户更近的应用服务器访问对应的数据副本。

例如主数据库位于一个区域,另外一个区域部署Read Replica。当用户主要来自多个地理区域时,这种架构可以降低部分读取请求的网络延迟。

但跨区域复制也意味着需要认真计算网络延迟、复制延迟以及数据传输成本。

如果业务要求读取结果必须始终与Primary完全同步,那么异步Read Replica并不适合直接承担这类强一致读取任务。

跨区域副本还经常与灾难恢复策略联系在一起,但需要注意,Read Replica本身并不等于完整的备份系统。真正的灾难恢复还涉及备份、恢复点目标(RPO)、恢复时间目标(RTO)以及故障切换流程。

数据库扩展之前,缓存往往更加便宜

如果大量请求重复读取完全相同的数据,那么让每一次请求都访问Cloud SQL并不是最有效的架构。

例如网站首页配置、热门文章、商品分类、公共API结果等数据,可以通过缓存减少数据库访问次数。

Google Cloud环境中可以根据应用需求采用Memorystore等缓存服务。应用首先检查缓存,如果缓存命中,就不需要访问Cloud SQL;只有缓存不存在或者已经过期时,才访问数据库。

这种方式与Read Replica并不冲突。

缓存解决的是“请求根本不需要访问数据库”的问题,Read Replica解决的是“确实需要访问数据库,但不能全部压在Primary上”的问题。

什么时候需要从Read Replica进一步升级架构

如果增加多个Read Replica以后,数据库仍然无法满足业务需求,就需要重新判断系统瓶颈。

如果问题来自单个数据库实例的写入能力,可以考虑数据库垂直扩容、优化事务、减少无效写入,或者根据业务特点进一步采用分片(Sharding)等架构。

如果问题主要来自分析查询,则不应该让生产事务数据库承担越来越多的复杂报表任务。可以考虑将分析工作负载迁移到更适合分析处理的数据平台。

如果问题来自大量重复读取,则缓存可能比继续增加Read Replica更加有效。

如果问题来自某些SQL查询本身,则应回到执行计划、索引和数据访问模式进行优化。

因此,数据库扩展并不是一条固定路线,而通常是从SQL优化开始,然后根据实际瓶颈逐步进入缓存、Read Replica、垂直扩容、分析系统分离以及分片等不同阶段。

Cloud Monitoring应该监控什么

Read Replica部署以后,监控不能只看CPU。

首先需要观察Primary和Replica的CPU、内存、磁盘I/O、数据库连接数和网络吞吐量。同时还要重点观察复制延迟,因为Replica即使CPU只有30%,如果复制已经明显落后,它仍然可能不适合承担对实时数据敏感的查询。

应用层则应该记录Primary和Replica分别承担了多少请求,并观察P50、P95、P99数据库查询延迟。

如果新增Replica之后,数据库总体CPU下降了,但用户实际请求延迟没有改善,就说明问题可能不在数据库计算资源,而是在网络、应用连接池、SQL执行效率或者缓存命中率。

这也是云数据库架构中非常重要的一点:不要因为某个资源指标下降,就直接认定系统性能已经改善,最终还是应该回到真实请求延迟和业务吞吐量。

一套比较完整的扩展路线

对于一个正在增长的Cloud SQL应用,可以按照这样的顺序进行演进:

首先优化SQL、索引和数据库连接池,解决可以通过软件优化消除的问题;随后根据CPU、内存和I/O情况进行实例规格调整;当读请求成为主要瓶颈时,引入Read Replica并在应用层实现读写分离;对于重复读取严重的业务增加缓存;如果跨区域访问成为主要问题,再考虑区域级部署;当数据库规模继续增长并出现单实例无法解决的结构性瓶颈时,再考虑分片或者把特定工作负载迁移到专门的分析系统。

Cloud SQL Read Replica真正的价值,并不是简单地“复制一个数据库”,而是给数据库架构增加了一条横向扩展读取能力的路径。它可以把Primary从大量普通SELECT请求中释放出来,让主实例更多承担核心写入和事务工作。但它同时带来了复制延迟、连接路由、数据一致性、监控和成本等新的工程问题。

所以,当数据库读压力开始增长时,最合理的做法并不是立即增加更多数据库实例,而是先找到真正的瓶颈。只有确定主要压力来自读取,并且业务能够接受副本存在一定复制延迟之后,Read Replica才真正成为合适的扩展方案。随着业务继续增长,再把缓存、区域部署、分析系统和分片等技术逐步组合起来,才能形成能够长期运行的数据库架构。

喜欢这篇报道?

使用下面的功能,方便以后继续阅读和分享 MNewsTV

设为 Google 新闻首选来源 让 Google 新闻优先显示 MNewsTV 的最新报道 ›
★ 我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

捐助(Paypal): https://www.paypal.me/observeccp
订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP