运行 对只读副本进行真空分析是否安全?
is it safe to run vacuum analyze on a read replica?
我在 AWS RDS 上通过 AWS DMS 从 PG 9.5 主副本设置了逻辑复制到 PG 12.3 只读副本。 (仅供参考,副本 session_replication_role 设置为“副本”。)
查询计划未在 PG 12.3 只读副本上优化,甚至基本查询 运行 在不利用索引的情况下也很慢。通常这很容易通过 运行ning "vacuumdb analyze" 解决。
问题:运行 分析只读副本安全吗?或者我应该 运行 它在主服务器上并且它会传播?
这应该没问题,因为它在物理上而不是逻辑上修改了 table。
但是,我只会收集 vacuumdb --analyze-only
的统计数据。很少需要 运行 VACUUM
来提高查询性能,并且比 ANALYZE
使用更多的资源。
我尝试使用 Postgres 13.3 在只读副本上执行 vacuumdb --analyze-only -j 1
但它失败了,并显示副本处于恢复模式的错误:
vacuumdb: processing database "mydb": Generating minimal optimizer statistics (1 target)
vacuumdb: error: processing of database "mydb" failed: ERROR: cannot execute ANALYZE during recovery
似乎只读副本确实从主数据库同步了统计信息,因此副本上不需要 vacuum analyze
运行。
涵盖了只读副本内存太少而无法使用索引的情况。因此,可能值得为只读副本尝试更大的实例类型以防有帮助。
我在 AWS RDS 上通过 AWS DMS 从 PG 9.5 主副本设置了逻辑复制到 PG 12.3 只读副本。 (仅供参考,副本 session_replication_role 设置为“副本”。)
查询计划未在 PG 12.3 只读副本上优化,甚至基本查询 运行 在不利用索引的情况下也很慢。通常这很容易通过 运行ning "vacuumdb analyze" 解决。
问题:运行 分析只读副本安全吗?或者我应该 运行 它在主服务器上并且它会传播?
这应该没问题,因为它在物理上而不是逻辑上修改了 table。
但是,我只会收集 vacuumdb --analyze-only
的统计数据。很少需要 运行 VACUUM
来提高查询性能,并且比 ANALYZE
使用更多的资源。
我尝试使用 Postgres 13.3 在只读副本上执行 vacuumdb --analyze-only -j 1
但它失败了,并显示副本处于恢复模式的错误:
vacuumdb: processing database "mydb": Generating minimal optimizer statistics (1 target)
vacuumdb: error: processing of database "mydb" failed: ERROR: cannot execute ANALYZE during recovery
似乎只读副本确实从主数据库同步了统计信息,因此副本上不需要 vacuum analyze
运行。