postgresql – AWS数据库单列添加了极多的数据

postgresql – AWS数据库单列添加了极多的数据,第1张

概述我正在使用PgAdmin从AWS数据库中检索数据.这很好用.问题是我在检索相应的行后将一个列设置为True,最初将其设置为Null.这样做会为我的数据库添加大量数据. 我已经检查过这不是由于其他进程:它只在我的程序运行时发生. 我确定没有添加任何行,我检查了前后的行数,它们是相同的. 此外,它只在更改特定表时执行此 *** 作,当我使用相同的进程更新同一数据库中的其他表时,数据库大小保持不变.它也不总是增 我正在使用Pgadmin从AWS数据库中检索数据.这很好用.问题是我在检索相应的行后将一个列设置为True,最初将其设置为Null.这样做会为我的数据库添加大量数据.

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

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

如何将单个布尔值从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 SizeFROM 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时,它会使表的大小加倍.

你可以做的是改变你的表,降低它上面的fillfactor,然后VACUUM:

ALTER table your_table SET (fillfactor = 90);VACUUM FulL your_table;

当然,通过这一步,您的桌子将大约增加10%,但Postgres将为您的更新留出一些空间,并且不会随着您的过程改变其大小.

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

总结

以上是内存溢出为你收集整理的postgresql – AWS数据库单列添加了极多的数据全部内容,希望文章能够帮你解决postgresql – AWS数据库单列添加了极多的数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存