- 文档首页
云数据库 PostgreSQL 版
用户指南
连接管理
管理连接终端
读写分离策略
读写分离策略
开启读写分离后,用户查询将会被发送到主节点或只读节点。如果希望一个符合负载均衡条件的 SQL 在开启读写分离后不被负载均衡、继续发送到主节点,可以采用在 SQL 前加 hint 的方式,通常使用 /*NO LOAD BALANCE*/。
发送到主节点的查询
标准 SQL 查询
- INSERT,UPDATE,DELETE,COPY FROM,TRUNCATE,CREATE,DROP,ALTER,COMMENT
- SELECT ... FOR SHARE | UPDATE
- 比 ROW EXCLUSIVE MODE 更严格的 LOCK 命令
- 在事务隔离级别 SERIALIZABLE 中的 SELECT
- BEGIN READ WRITE,START TRANSACTION READ WRITE
- SET TRANSACTION READ WRITE,SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
- SET transaction_read_only = off
- 两阶段提交命令:PREPARE TRANSACTION,COMMIT PREPARED,ROLLBACK PREPARED
- 多语句查询(multiple SQL commands on single line)
- 一些序列方法(nextval and setval)
自定义 SQL 查询
当前版本默认定义了一些函数和 SQL 模板,包含这些函数或者匹配上 SQL 模板的查询会转发到主节点。
- 包含 nextval,setval,lastval,currval,txid_current,gin_clean_pending_list 函数的查询
- 包含以 pg_catalog,pg_,current_,cursor_ 作为前缀的函数的查询
- 符合查询模板 .*for update.* 的查询
发送到只读节点的查询
- EXPLAIN ANALYZE and the query is SELECT not including writing functions
发送到主节点和只读节点
显式事务转发策略
- 在显示事务中,BEGIN 会被同时转发到主节点和只读节点。
- 在显式事务中,遇到不能在只读节点执行的查询语句(如 INSERT)之前的查询语句,会发送到只读节点。
- 在显式事务中,遇到不能在只读节点执行的查询语句(如 INSERT),会发送到主节点。在这之后的查询语句都会发送到主节点上,这是为了让 SELECT 立即看到 INSERT 的结果。 此行为一直持续到事务关闭或终止。
最近更新时间:2025.11.17 14:48:11