我们有一个postgres数据库,它在真空后的大小几乎是15 We。一个专用的硬件i,e 32 of的ram,12个核心。数据每天自动插入大约300 k,我们也会处理数据。数据在3个月后被删除,以降低db的大小。
通常插入速度为: 1200次/分钟
其中一个重要的表上有一个相当大的触发器(不幸的是,我们不能对它做任何事情),DB可以每分钟插入大约1200条记录,这对我们来说是可以接受的。这些记录不是批量插入,而是在处理后单独插入。
问题开始后:每分钟插入200次
大约10天前,我们的数据库突然变得非常慢,即每分钟200次插入。因此,经过几个不眠之夜,我们吸尘了十大最大的桌子,但只提高了性能到300插入每分钟。
真空后10张大桌子: 300片/分钟
因此,我们对整个数据库进行了真空分析,并列出了10个最大的表。这样做非常有效,我们对结果相当满意。
全真空分析和重新索引后: 1400插入/分钟
但10天后,我们又开始有同样的问题,现在插入回到200插入/分钟。我们没有改变postgres的任何配置。
10天后,返回到: 200插入/分钟
你能帮我找出问题吗?我知道这不是很多可以处理的信息,但是如果你们真的有这个问题的话,你可能会马上发现它。这可能是磁盘的问题还是死锁太多?硬盘可能不是一个问题,因为我们确实获得了良好的速度后真空,但请告诉我,如果你认为。
谢谢你帮我。
发布于 2021-04-14 11:21:13
如果在VACUUM ANALYZE之后恢复了性能,我会质疑这个表(S)是否是auto_vacuumed和auto_analyzed。
如果您查看pg_状态_用户_表格视图,last_autovacuum和last_autoanalyze的值是否合理?
如果表经常被锁定,那么自动真空可能无法运行。
发布于 2023-01-15 02:21:28
我对Postgre没有经验。但我也有过类似的使用不同数据库引擎的经验。基于此,我要说,插入事务没有被正确提交。也许它们是自动提交的。
我的建议是遍历所有查询,重新考虑所使用的事务和可见性。
https://dba.stackexchange.com/questions/289575
复制相似问题