我已经检查过这不是由于其他进程:它只在我的程序运行时发生.
我确定没有添加任何行,我检查了前后的行数,它们是相同的.
此外,它只在更改特定表时执行此 *** 作,当我使用相同的进程更新同一数据库中的其他表时,数据库大小保持不变.它也不总是增加数据库大小,只有每次改变一次总大小增加.
如何将单个布尔值从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数据库单列添加了极多的数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)