繁体   English   中英

具有唯一索引的 Postgres 中“DROP NOT NULL”的性能影响

[英]Performance Impact of “DROP NOT NULL” in Postgres with unique index

我们有一个列,我们想让它可以为空,所以我们运行了以下迁移:

 ALTER TABLE example_table ALTER COLUMN example_column DROP NOT NULL;

出乎意料的是,这需要很长时间才能运行并导致我们的 web 服务停机。 我们一直在为为什么而摸不着头脑。 该表经常被扫描但从未被写入,并且它在example_column上有一个唯一索引。

为什么这会导致性能下降?

我们最好的理论是唯一索引在 Postgres 内部幕后被删除然后重建,但我读过的任何文档中都没有任何内容表明这种列交互会发生这种情况。

为什么这 A) 花了很长时间,而 B) 破坏了性能?

这可能是锁升级的情况。 删除 NOT NULL 需要在表上设置一个非常简短的 ACCESS EXCLUSIVE 锁。 但是,如果该锁不可用,那么它将自己排在阻塞它的现有(较弱)锁后面,然后其他所有内容都排在该锁请求后面。 在此处查看讨论: https://dba.stackexchange.com/questions/132851/database-frozen-on-alter-table

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM