本文将介绍PolarDB-X读写分离功能的原理。
当PolarDB-X存储资源MySQL主实例的读请求较多、读压力比较大时,您可以通过读写分离功能对读流量进行分流,减轻存储层的读压力。
PolarDB-X读写分离功能采用了对应用透明的设计。在不修改应用程序任何代码的情况下,只需在控制台中调整读权重,即可实现将读流量按自定义的权重比例在存储资源MySQL主实例与多个存储资源只读实例之间进行分流,而写流量则不做分流全部到指向主实例。
设置读写分离后,从存储资源MySQL主实例读取属于强读(即实时强一致读);而只读实例上的数据是从主实例上异步复制而来存在毫秒级的延迟,因此从只读实例读取属于弱读(即非强一致性读)。您可以通过Hint指定那些需要保证实时性和强一致性的读SQL到主实例上执行,详情请参见读写分离Hint。
读写分离对事务的支持
读写分离仅对显式事务(即需要显式提交或回滚的事务)以外的读请求(即查询请求)有效,写请求和显式事务中的读请求(包括只读事务)均在主实例中执行,不会被分流到只读实例。
常见的读、写请求SQL语句包括:
- 读请求:SELECT、SHOW、EXPLAIN、DESCRIBE。
- 写请求:INSERT、REPLACE、UPDATE、DELETE、CALL。
关于如何设置读写分离,详情请参见存储管理。