文档

RDS无法查看新插入数据

更新时间:
一键部署

问题描述

新插入的数据查询不到

问题原因

  • 只读实例存在延迟

  • 事务没有提交

  • RR隔离级别在已开启的事务中进行的查询

解决方案

一、只读实例存在延迟

1)只读实例规格过小

  • 建议您升级只读实例规格,使只读实例的配置大于或者等于主实例的配置,避免由于只读实例规格较小导致延迟。

2)主实例的TPS(Transaction Per Second)过高

  • 确认主实例的TPS是否正常,如果TPS过高,则需要对业务进行优化或者拆分,保证主实例的TPS不会导致只读实例出现延迟。TPS相关数据可以通过自治服务的性能趋势页面查看。

3)主实例的大事务

  1. 在只读实例出现大事务导致延迟时,登录数据库,执行以下SQL语句,确认Seconds_Behind_Master不断变化,而Exec_Master_Log_Pos却保持不变,说明只读实例的SQL线程在执行一个大事务或者DDL操作。然后通过show processlist语句定位具体的线程。

    show slave status \G

    系统显示类似如下。 

  2. 建议您将大事务拆分为小事务分别执行。例如在delete语句中增加where条件子句,限制每次删除的数据量,将一次删除操作拆分为多次数据量较小的删除操作进行。这样只读实例可以迅速的完成事务的执行,不会造成数据的延迟。

4)主实例的DDL语句执行时间长

  • 对于DDL直接引起的只读实例延迟,建议在业务低峰期执行这些DDL。

  • 对于来自主实例的DDL语句在只读实例上被阻塞的情况:

    1. 需要在只读实例上执行show processlist语句,确认SQL线程的状态为“waiting for table metadata lock”。

    2. 然后使用kill命令终止只读实例上引起阻塞的会话,恢复只读实例和主实例的数据同步,引起阻塞的会话请参考该文档最下方的链接。

二、事务没有提交

在RR以及RC隔离级别下,当事务没有提交时,在该事务外是查询不到的,修改完后需要及时提交。

事务隔离级别可以执行如下命令查看:

show variables like '%transaction_isolation%';

 

三、RR隔离级别在已开启的事务中进行的查询

在RR隔离级别下,如是在已开启的事务中进行的查询操作,那么开启该事务期间该事务外插入的数据是查询不到的,需要提交或者回滚当前事务或另开一个窗口进行查询操作,从而查到最新数据。

 

适用范围

  • RDS For MySQL

相关文档:

https://help.aliyun.com/document_detail/94566.htm?spm=a2c4g.11186623.0.0.395a44ccSlWZva#concept-csn-5tt-4fb

 

 

  • 本页导读
文档反馈