gpt4 book ai didi

postgresql - 如何缩小 pg_toast 表?

转载 作者:行者123 更新时间:2023-11-29 11:10:28 30 4
gpt4 key购买 nike

我在 mac osx 上运行 postgres 9.3,我有一个失控的数据库。我曾经有一个表,其中有一列存储大量数据。然后我注意到,由于 pg_toast 表,db 大小增长到大约 19gb。然后我删除了提到的列并运行 vacuum 以使数据库再次变小,但它保持不变。那么如何缩小数据库大小呢?

 SELECT nspname || '.' || relname AS "relation"
,pg_size_pretty(pg_relation_size(C.oid)) AS "size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC
LIMIT 20;

结果

 pg_toast.pg_toast_700305                    | 18 GB
pg_toast.pg_toast_700305_index | 206 MB
public.catalog_hotelde_images | 122 MB
public.routes | 120 MB



VACUUM VERBOSE ANALYZE pg_toast.pg_toast_700305; INFO: vacuuming "pg_toast.pg_toast_700305"
INFO: index "pg_toast_700305_index" now contains 9601330 row versions in 26329 pages
DETAIL: 0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.06s/0.02u sec elapsed 0.33 sec.
INFO: "pg_toast_700305": found 0 removable, 0 nonremovable row versions in 0 out of 2393157 pages
DETAIL: 0 dead row versions cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.06s/0.07u sec elapsed 0.37 sec.
VACUUM

路由表的结构

id serial NOT NULL,
origin_id integer,
destination_id integer,
total_time integer,
total_distance integer,
speed_id integer,
uid bigint,
created_at timestamp without time zone,
updated_at timestamp without time zone,
CONSTRAINT routes_pkey PRIMARY KEY (id)

最佳答案

您可以使用两种吸尘类型之一:标准完全

标准:

VACUUM table_name;

完整:

VACUUM FULL table_name; 

请记住,VACUUM FULL 会锁定它正在处理的表,直到它完成。

您可能希望在频繁上传/删除事件的表上更频繁地执行标准真空,它可能不会像完全真空那样为您提供足够的空间,但您将能够运行 SELECT、INSERT、UPDATE 和DELETE 完成它会花费更少的时间。

在我的例子中,当 pg_toast(连同其他表)失控时,标准 VACUUM 产生了轻微的差异,但还不够。我使用 VACUUM FULL 回收更多磁盘空间,这在大型关系上非常慢。我决定tune autovacuum并在经常更新的表上更频繁地使用标准 VACUUM。

如果你需要使用 VACUUM FULL,你应该在你的用户不太活跃的时候使用。另外,不要关闭 autovacuum。

您可以通过在命令中添加verbose 来获得一些额外的信息:

VACUUM FULL VERBOSE table_name;

关于postgresql - 如何缩小 pg_toast 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28032850/

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