Postgresql中快速增长的表

479

我们在RDS实例中运行postgresql 9.5.2。我们注意到的一件事是,某个表的大小有时会非常迅速地增长。

该表仅具有33,000行和〜600列。所有列均为数字(十进制(25,6))。抽真空后,以下查询中报告的“ total_bytes”

select c.relname, pg_total_relation_size(c.oid) AS total_bytes
from pg_class c;

约为150MB。但是,我们观察到它曾一度增长到71GB。在最近的一集中,total_bytes在30分钟内增长了10GB。

在上述情节中,我们有一个批量更新查询,该查询每分钟运行约4次,以更新表中的每条记录。但是,在其他时间,尽管进行了类似的更新活动,但表大小仍保持不变。

我了解这可能是由于更新中遗留了“失效记录”造成的。的确,当此表变得太大时,仅运行真空吸尘器便会将其缩小到正常大小(150M)。我的问题是

  • PostgreSQL中其他人的表大小是否经历过类似的快速增长,这是正常现象吗?

  • 如果我们的批处理更新查询导致表大小的快速增长,为什么不是每次都发生呢?实际上,我试图通过运行类似的命令来手动重现它

    更新my_table集x = x * 2

但不能-查询前后的表大小保持不变。

重的

问题是在一个表中有600列,这从来都不是一个好主意。这将导致很多问题,表大小只是其中之一。

PostgreSQL文档...

[对于数值]的实际存储要求是每组四个十进制数字的两个字节,外加三到八个字节的开销。

所以decimal(25, 6)是一样的东西8 +(4分之31* 2)或约每列24个字节。每行600列,即每行约14,400字节或每行14k。在33,000行中,大约为450兆。

如果您每分钟更新每行4次,那么每分钟将有1.8排死行。

  1. 您应该修复模式设计。
  2. 您不必每分钟触摸表的每一行4次。

您应该问一个有关重新设计该表和流程的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章