开通数据库代理后有大量select请求分发到主节点-j9九游会登录
原因分析:
- 延时阈值参数
只读实例同步主实例数据时允许的最长延迟时间。延时阈值仅在存在只读实例时生效。为避免只读实例读取的数据长时间和主实例不一致,当一个只读实例的延迟时间超过设置的延迟阈值,则不论该只读实例的读权重是多少,读请求都不会转发至该只读实例。
更多信息,请参见设置延时阈值和读写分离权重。
- 读权重参数
设置主实例和只读实例的读权重分配,可以控制读请求的分发配比,仅在存在只读实例时生效。
例如:一主两只读,设置的读权重为1(主):2(只读1):3(只读2),那么会按照1:2:3将读请求分发到主和只读实例上;如果将读权重设置为0:2:3,会按照2:3将请求分发的只读实例,不会将读请求分发的主实例。
更多信息,请参见设置延时阈值和读写分离权重。
- 事务
事务中的sql会发往主,若在查询语句前设置set autocommit=0也会被当做事务处理路由到主实例。
- 连接绑定
执行了multi-statements(如“insert xxx;select xxx”)当前连接的后续请求会全部路由到主节点;创建临时表的sql会将连接绑定到主,后续此连接的请求都会到主。需断开当前连接并重新连接才能恢复读写分离。
- 自定义变量
sql中包含了自定义变量的语句会发到主节点。
- 带锁的读操作(如select for update)会被路由到主节点。
- 通过hint指定sql发往主实例或只读实例。
在读写分离权重分配体系之外,在sql开头添加hint注释进行强制路由:/*force_master*/强制路由到主节点、/*force_slave*/强制路由到只读节点;hint注释仅作为路由建议,非只读sql、事务中的场景不能强制路由到只读节点。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨