gpt4 book ai didi

postgresql - AWS数据库单列添加极多数据

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

我正在使用 PgAdmin 从 AWS 数据库中检索数据。这很好用。问题是我有一个列在检索到相应的行后设置为 True,最初它被设置为 Null。这样做会向我的数据库中添加大量数据。

我已经检查过这不是由于其他进程造成的:它只在我的程序运行时发生。我确定没有添加任何行,我检查了之前和之后的行数,它们是相同的。

此外,它仅在更改特定表时执行此操作,当我使用相同进程更新同一数据库中的其他表时,数据库大小保持不变。它也不总是会增加数据库的大小,只有每次更改一次总大小才会增加。

如何将单个 bool 值从 Null 更改为 True 向我的数据库添加 0.1 MB?

我正在使用以下命令来检查我的数据库构成:

获取表格大小

SELECT
relname as Table,
pg_total_relation_size(relid) As Size,
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) as External Size
FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;

获取行数:

SELECT schemaname,relname,n_live_tup 
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;

获取数据库大小:

SELECT pg_database_size('mydatabasename')

最佳答案

如果您没有更改它,那么您的 fillfactor在表格中为 100%,因为这是默认值。

这意味着您表中的每个更改都会将已更改的行标记为已过时,并将重新创建更新的行。如果您的表上有索引,问题可能会更糟,因为这些索引也应该在每一行更改时更新。正如您所想象的那样,这也会损害 UPDATE 性能。

所以从技术上讲,如果您读取整个表并在读取行后更新甚至最小的列,那么当您的 fillfactor 为 100 时,表的大小就会加倍。

你可以做的是ALTER你的表降低fillfactor,然后VACUUM:

ALTER TABLE your_table SET (fillfactor = 90);
VACUUM FULL your_table;

当然,通过这一步,您的表会大 10%,但 Postgres 会为您的更新腾出一些空间,并且它不会随着您的进程改变其大小。

autovacuum 之所以有用,是因为它会定期清理过时的行,因此它会使您的表保持相同的大小。但是会给你的数据库带来很大的压力。如果您碰巧知道您将按照您在开始问题中描述的那样进行操作,那么我建议根据您的需要调整 fillfactor

关于postgresql - AWS数据库单列添加极多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228612/

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