【发布时间】:2018-01-04 11:57:02
【问题描述】:
我使用的是 PostgreSQL 9.6 (Ubuntu 16.04),我有一个大约 10k 行的小表 T,其中每行在高峰时间每分钟更新 2 次(类似于UPDATE T SET c1 = ?, c2 = ? WHERE id = ?)。此外,这是在该表中完成的唯一更新操作,并且插入和删除根本不经常。
但是,我注意到 T 中的 SELECT 查询有点慢,经过一番研究,我发现 "an update in PostgreSQL is actually a transaction of DELETE+INSERT (due MVCC)" .此外,我发现了类似的问题,例如 this one 和 this one,但与 UPDATE 查询有关。
我的问题是:连续频繁更新会减慢选择查询的速度吗?如果是这样,正确的处理方法是什么?
【问题讨论】:
-
这取决于选择的内容。索引中的更新列是否用作选择的条件?查询计划说明了什么?
-
你可以在一段时间后使用 VACUUM 来保持性能
-
@SamiKuhmonen:更新的列不在索引中,也不用作选择的条件,尽管在其中一个查询中有这些列之一的排序。我想非索引列的频繁更新比索引列好,对吧?关于查询计划,我会用
EXPLAIN ANALYZE的结果更新问题 -
很大程度上取决于完整的表定义、事务处理、您通常运行的确切查询以及您的 autovacuum 设置。 [postgresql-performance] 问题需要更多细节。请参阅标签信息中的说明。
标签: postgresql postgresql-performance vacuum autovacuum