首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Alter需要表锁

Alter需要表锁
EN

Stack Overflow用户
提问于 2017-01-06 01:36:47
回答 1查看 3.5K关注 0票数 4

我遇到了这样一种情况,Pg总是更喜欢对一个大约有7000万行的表进行顺序扫描。(索引扫描是该查询的理想选择,我已经通过设置enable_seq_scan=off来确认它,速度提高了200倍)

因此,为了帮助Pg更好地理解我的数据,我执行了以下操作

ALTER TABLE tablename ALTER COLUMN columnname SET STATISTICS 1000;

不幸的是,这需要更新排他锁来锁定整个表(锁太多)。

  1. 是否有避免锁定此语句的解决方案?
  2. 根据主键范围对此表进行数据共享,因此我希望Pg更好地理解我的Pk,以便它知道哪个用户获得了大量数据。如果我也增加PrimaryKey列的统计量,会有用吗?
EN

回答 1

Stack Overflow用户

发布于 2017-01-06 07:40:36

从你联系到的文档里

集统计量 此表单为后续的分析操作设置每列统计信息收集目标。可以将目标设置在0到10000之间;或者,将其设置为-1以恢复到使用系统默认统计目标(default_statistics_target)。有关PostgreSQL查询计划器使用统计信息的更多信息,请参阅第14.2节。 SET STATISTICS获取一个共享更新独占锁.

而且,在用于显式锁定的文档

共享更新排他性与共享更新独占、共享、共享行排他、排他性和访问独占锁定模式相冲突。此模式保护表不受并发架构更改和真空运行的影响。 由真空(不完全)获取,分析,同时创建索引,以及ALTER验证和其他ALTER变体(详细信息见ALTER )。

所以当分析发生时,你不能改变模式,或者是真空。那又怎么样?它们应该发生得很快。几乎立刻。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41497583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档