本文介绍了使用全局一致性(高性能模式)功能的常见问题。
开启全局一致性(高性能模式)功能后,如果某些查询不需要使用全局一致性读,该如何操作?
在RO节点开启全局一致性(高性能模式)后,默认对所有的新建连接生效。如果某些查询不需要使用该功能,可以通过以下命令来关闭当前连接的全局一致性读:
SET Session innodb_polar_scc = OFF
关闭当前连接的全局一致性(高性能模式)功能,集群版本需满足以下条件之一:
PolarDB MySQL版8.0.2版本,且修订版本为8.0.2.2.16及以上。
PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.33及以上。
PolarDB MySQL版5.7版本,且修订版本为5.7.1.0.28及以上。
如何设置全局一致性读超时时间?
您可以登录PolarDB控制台。通过设置参数loose_innodb_polar_scc_wait_timeout
的值来设置全局一致性读超时时间。如果超时,客户端会收到以下错误信息:
Wait replication complete timeout, please retry
对于写入压力较大,或写入压力不稳定的集群,您可以将该参数loose_innodb_polar_scc_wait_timeout
的值设置大一些。
全局一致性读超时转发机制是什么?
对于PolarDB MySQL版5.7版本,开启全局一致性(高性能模式)后,转发机制如下:
通过集群地址路由至RO节点的查询,如果出现全局一致性等待超时,会由Proxy自动转发至RW节点进行处理。客户端不会收到报错信息。
通过只读Endpoint地址(没有挂载RW节点)路由到RO节点的查询,如果出现全局一致性等待超时,则不会转发到RW节点进行处理。
对于PolarDB MySQL版8.0版本,开启全局一致性(高性能模式)后,转发机制如下:
若数据库代理版本为2.8.36及以上:
通过集群地址路由至RO节点的查询,如果出现全局一致性等待超时,会由Proxy自动转发至RW节点进行处理。客户端不会收到报错信息。
通过只读Endpoint地址(没有挂载RW节点)路由到RO节点的查询,如果出现全局一致性等待超时,则不会转发到RW节点进行处理。
若数据库代理版本为2.8.36以下:
开启全局一致性(高性能模式)后,通过任意地址连接并路由到RO节点的请求,在出现全局一致性等待超时时,都不会转发至RW节点进行处理。
您可以通过开启RDMA日志传输来降低RO节点的读延迟,或通过参数
loose_innodb_polar_scc_wait_timeout
来调整全局一致性读超时时间。
全局一致性读超时后,如何降级?
您需要登录PolarDB控制台。将参数loose_innodb_polar_scc_timeout_degrade
的值设置为ON,当全局一致性读超时后,查询操作会自动降级为非一致性读取,且客户端不会收到报错信息。
如何避免低写入负载场景下的读延迟?
您可以登录PolarDB控制台。将高性能参数innodb_flush_log_at_trx_commit
的值设置为1,来避免低写入场景下的读延迟。