阿里云数据库独有功能

RDS MySQL读写分离如何确保数据读取的时效性

阿里云内部网络会确保同步日志在主实例和只读实例间的实时传输,正常情况下只读实例不会有延迟产生。但受限于MySQL本身的复制机制,若同步日志的应用时间较久,会产生数据同步的延迟,这个是MySQL尚无法在技术手段上规避的问题。为减小延迟,建议您的只读实例规格不小于主实例,从而确保有足够高的性能来应用同步日志。

RDS支持用户设置延迟阈值,当某个只读实例的延迟超过该阈值时,系统会不再转发任何请求至该实例。当所有只读实例均超过延迟阈值时,请求直接路由到主库,不管主库的读权重是否开启。

在使用读写分离过程中,若您需要某些查询语句获取实时性的数据,可通过Hint格式将这些查询语句强制转发至主实例执行。RDS读写分离支持的Hint格式为/*FORCE_MASTER*/,指定后续SQL到主实例执行。示例如下:

/*FORCE_MASTER*/ SELECT * FROM table_name;

 

dbms_trans.returning 

背景信息

MySQL的语句执行结果报文通常分为三类:Resultset、OK和ERR。针对DML语句返回的是OK或ERR报文,其中包括影响记录、扫描记录等属性。但在很多业务场景下,执行INSERT、UPDATE、DELETE这样的DML语句后,都会跟随SELECT查询当前记录内容,以进行接下来的业务处理,为了减少一次客户端和服务器的交互,returning功能支持使用DML语句后返回Resultset。

插入

mysql> call dbms_trans.returning("*", "insert into t(id) values(NULL),(NULL)");

+----+------+---------------------+

| id   | col1 | col2                  |

+----+------+---------------------+

| 1    | 1     | 2019-09-03 10:39:05 |

| 2    | 1     | 2019-09-03 10:39:05 |

+----+------+---------------------+

更新

mysql> call dbms_trans.returning("id, col1, col2", "update t set col1 = 2 where id >2");

+----+------+---------------------+

| id   | col1 | col2                  |

+----+------+---------------------+

| 3    | 2     | 2019-09-03 10:41:06 |

| 4    | 2     | 2019-09-03 10:41:06 |

+----+------+---------------------+

删除

mysql> call dbms_trans.returning("id, col1, col2", "delete from t where id < 3");

+----+------+---------------------+

| id   | col1 | col2                  |

+----+------+---------------------+

| 1    | 1     | 2019-09-03 10:40:55 |

| 2    | 1     | 2019-09-03 10:40:55 |

+----+------+---------------------+

你可能感兴趣的:(数据库,mysql)