我遇到了这样一种情况,Pg总是更喜欢对一个大约有7000万行的表进行顺序扫描。(索引扫描是该查询的理想选择,我已经通过设置enable_seq_scan=off来确认它,速度提高了200倍)
因此,为了帮助Pg更好地理解我的数据,我执行了以下操作
ALTER TABLE tablename ALTER COLUMN columnname SET STATISTICS 1000;
不幸的是,这需要更新排他锁来锁定整个表(锁太多)。
发布于 2017-01-06 07:40:36
从你联系到的文档里
集统计量 此表单为后续的分析操作设置每列统计信息收集目标。可以将目标设置在0到10000之间;或者,将其设置为-1以恢复到使用系统默认统计目标(default_statistics_target)。有关PostgreSQL查询计划器使用统计信息的更多信息,请参阅第14.2节。 SET STATISTICS获取一个共享更新独占锁.
而且,在用于显式锁定的文档上
共享更新排他性与共享更新独占、共享、共享行排他、排他性和访问独占锁定模式相冲突。此模式保护表不受并发架构更改和真空运行的影响。 由真空(不完全)获取,分析,同时创建索引,以及ALTER验证和其他ALTER变体(详细信息见ALTER )。
所以当分析发生时,你不能改变模式,或者是真空。那又怎么样?它们应该发生得很快。几乎立刻。
https://stackoverflow.com/questions/41497583
复制相似问题