全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

什么是读写分离

最近更新时间:2026-01-12 22:24:55

读写分离

读写分离(Read-Write Splitting)是一种常见的数据库性能优化与扩展策略。通过数据库代理对 SQL 请求进行自动识别,将读请求(SELECT)与写请求(INSERT / UPDATE / DELETE)分发至不同的数据库节点(详见:请求转发逻辑),从而提升系统的整体性能、扩展能力和可用性。

该机制尤其适用于 读多写少 的业务场景,可有效缓解主实例的读取压力。

读写分离原理

数据库代理在代理连接地址层面对请求进行解析和路由:写请求统一转发至主实例执行,读请求根据转发策略分配至各个只读实例,实现读写请求的自动分流,从而降低主实例负载并提升系统吞吐能力。

读写分离优势

1)统一接入点,简化架构管理

在未启用读写分离的情况下,应用需分别维护主实例与多个只读实例的连接信息,增加了配置和运维复杂度。

通过 RDS 数据库代理服务,应用仅需配置一个统一的代理连接地址,即可实现读写请求的智能路由。该方案对应用完全透明,并支持通过横向扩展只读实例数量来提升系统整体吞吐能力。

2)灵活配置权重与阈值,满足多样化业务需求

支持按需设置主实例及各只读实例的读流量权重和相关阈值,实现精细化的流量调度与负载控制,适配不同业务场景的性能需求。

3)实例健康检查,提升系统可用性

数据库代理内置实例健康监测机制,持续检测各节点运行状态。当检测到实例异常或故障时,系统将自动隔离异常节点并重新分配流量;待实例恢复后,可自动将其重新纳入服务集群,确保业务连续性与高可用性。

说明:为避免单点故障并提升系统可用性,建议为每个主实例至少配置两个只读实例。

请求转发逻辑

数据库代理会根据 SQL 类型、事务状态及上下文信息,对请求进行智能路由。默认情况下,写请求及对一致性要求较高的读请求将被路由至主实例,其余可安全分离的读请求则路由至只读实例或主实例。

只发往主实例

发往只读实例或主实例

总是发往所有实例

  • INSERT、UPDATE、DELETE、SELECT FOR UPDATE

  • 所有DDL操作(建表/库、删表/库、变更表结构、权限等)

  • 所有事务中的请求

  • 用户自定义函数

  • 存储过程

  • 使用到临时表(显示创建)的请求

  • SELECT last_insert_id()

  • 所有对用户变量的查询和更改

  • KILL(SQL语句中的KILL,非命令KILL)

  • LOCK相关语句 (LOCK TABLE、UNLOCK TABLE等)

  • FLUSH相关的语句(如FTWRL)

  • SAVEPOINT语句

  • 使用Hint强制路由到主实例,如select /use_master/ ...

  • 非事务中的SELECT(自动事务)

  • 所有系统变量的更改

  • USE命令

开启读写分离

支持在 高可用版单机版 中使用读写分离功能(需搭配只读实例)。开通数据库代理后,实例将自动启用读写分离,无需手动配置。

  • 高可用版:实例备节点不可访问,需要先创建至少一个 MySQL 只读实例,再开通数据库代理,方可实现读写分离。

  • 单机版:实例无备节点,同样需要先创建至少一个 MySQL 只读实例,再开通数据库代理。

开通读写分离功能后,您还可以进行以下操作:

  • 设置读写属性与读权重:调整代理连接地址的读写属性及各节点的读权重,实现业务隔离和负载均衡。

  • 设置连接池属性:根据业务需求选择使用事务连接池或会话连接池,优化连接复用与资源利用。

  • 开启或关闭延迟剔除功能:当没有可用只读实例时,是否自动将只读请求路由至主实例执行,以保障业务可用性。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈