gpt4 book ai didi

postgresql - 如何通过频繁更新避免碎片化的数据库存储?

转载 作者:行者123 更新时间:2023-11-29 12:34:22 25 4
gpt4 key购买 nike

当我有下表时:

CREATE TABLE test
(
"id" integer NOT NULL,
"myval" text NOT NULL,
CONSTRAINT "test-id-pkey" PRIMARY KEY ("id")
)

当进行大量如下查询时:

UPDATE "test" set "myval" = "myval" || 'foobar' where "id" = 12345

然后 myval 行会随着时间变得越来越大。postgresql 会做什么?它将从哪里获得空间?

我能否避免 postgresql 需要多次查找才能读取特定的 myval 列?

postgresql 会自动执行此操作吗?

我知道通常我应该尝试更多地规范化数据。但是我需要一次搜索就可以读取值。每次更新(添加数据)时,Myval 都会增加大约 20 个字节。有些专栏会有 1-2 次更新,大约有 1000 次更新。通常我只会使用一个新行而不是更新。但随后选择变得越来越慢。所以我想到了反规范化。

最佳答案

更改表的 FILLFACTOR 以便为将来的更新创建空间。这也可以是热更新,因为文本字段没有索引,以加快更新速度并降低 autovacuum 开销,因为热更新使用微真空。 CREATE TABLE 语句有一些关于 FILLFACTOR 的信息.

ALTER TABLE test SET (fillfactor = 70);
-- do a table rebuild to blow some space in your current table:
VACUUM FULL ANALYZE test;
-- start testing

值 70 不是完美的设置,它取决于您的独特情况。也许您觉得 90 岁没问题,也可能是 40 岁或其他。

关于postgresql - 如何通过频繁更新避免碎片化的数据库存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com