云数据库 RDS-只读查询复制冲突:为什么会产生流复制冲突?

时间:2024-11-08 17:37:37

为什么会产生流复制冲突?

当只读库正在执行某个表的查询(可能是业务应用产生,也可能是手动连接执行查询),这时主库执行了DROP TABLE操作,在该操作写入wal日志并同步到只读库后,为了保证数据一致性,只读库会迅速应用DROP TABLE操作,这时DROP TABLESELECT就会形成冲突。以下几种场景会产生流复制冲突:

  1. 只读库中对某个表正在进行查询(AC CES S SHARE),需要应用wal日志中的ACCESS EXCLUSIVE锁的操作。例如:DROP TABLETRUNCATE TABLE、大多数ALTER TABLE等操作。
  2. 主库vacuum清理死元组造成的冲突。若只读在主库执行vacuum之前就启动了一个查询,主库vacuum处理掉了只读库所需要的死元组时,就会产生冲突。
support.huaweicloud.com/usermanual-rds/rds_pg_08_00016.html