在PostgreSQL中更新单列花费大量时间和大量磁盘空间

时间:2018-09-20 04:24:17

标签: postgresql postgresql-9.6

我对具有1000万条记录的单列执行了更新查询。在postgresql中这会花费大量时间和大量磁盘空间。请找到以下查询。 “ 更新测试集record_status ='I';” 并且我的列数据类型为“ char(1)

请向我建议为什么要花费大量时间和大量磁盘空间。

谢谢, 维塔尔

1 个答案:

答案 0 :(得分:1)

在PostgreSQL中,UPDATE创建该行的新版本(“元组”)(例如,参见文档中的this部分)。

因此,通过更新表中的每一行,可以有效地使表的大小增加一倍。自动行删除了旧的行版本,但表的大小保持不变(变为“膨胀”)。

空白空间可以在以后的INSERT中重新使用,但是如果要消除它,请使用VACUUM (FULL)

许多新的元组也解释了持续时间长的问题。增加max_wal_size可能会减少语句引起的检查点数量,从而对某些人有所帮助。