我在 postgres 上运行了一个巨大的查询,其中一个连接表总是进行顺序扫描。列上的索引存在,而 postgres 没有使用它。我做了一个真空分析,然后 postgres 查询计划立即更改为进行索引扫描。
我的问题是进行真空分析的最有效方法是什么。它锁定表吗?如果是这样,您如何真空分析实时生产表?
Postgress 遵循 MVCC 规则。因此,在表上运行的任何查询都不会与表上发生的写入发生冲突。查询根据运行查询时的快照返回结果。
现在我有主人和奴隶了。分析师使用从属设备来运行查询和执行分析。当从属服务器正在复制并且分析师同时运行他们的查询时,我可以看到复制滞后很长一段时间。如果查询长时间运行,复制滞后很长一段时间,并且如果主服务器上的写入数量恰好是相当高,然后我最终会丢失 WAL 文件并且复制可以继续进行。我只需要启动另一个奴隶。为什么会出现这种情况?如何允许查询和复制在姿势上同时发生?我可以应用任何参数设置来实现这一点吗?