【发布时间】:2018-09-20 13:09:33
【问题描述】:
我在包含 1000 万条记录的单列上执行了更新查询。在 postgresql 中需要大量时间和大量磁盘空间。请找到以下查询。 "更新测试集record_status = 'I';" 我的列数据类型是“char(1)”
请告诉我为什么要花费大量时间和大量磁盘空间。
谢谢, 重要
【问题讨论】:
我在包含 1000 万条记录的单列上执行了更新查询。在 postgresql 中需要大量时间和大量磁盘空间。请找到以下查询。 "更新测试集record_status = 'I';" 我的列数据类型是“char(1)”
请告诉我为什么要花费大量时间和大量磁盘空间。
谢谢, 重要
【问题讨论】:
在 PostgreSQL 中,UPDATE 会创建新版本的行(“元组”)(例如参见文档的 this 部分)。
因此,通过更新表格中的每一行,您可以有效地将表格大小翻倍。旧的行版本被 autovacuum 删除,但表的大小保持不变(它变得“臃肿”)。
未来INSERTs 可以重复使用空白空间,但如果您想摆脱它,请使用VACUUM (FULL)。
许多新元组也解释了持续时间长。增加max_wal_size 可能会通过减少语句引起的检查点数量来帮助一些人。
【讨论】: