Bar*_*rry 11 postgresql vacuum
我们在 Windows 上使用 Postgres 9.2 来存储低频时间序列数据:我们每周 7 天、24 小时每秒插入大约 2000 行,没有停机时间。有一个DELETE
每隔 10 分钟左右在桌子上运行一次,以将桌子的长度保持在固定的天数。这最终是一个相当稳定的 9 亿行。(对于那些感兴趣的人,SELECT
, INSERT
,DELETE
都是高性能的)。
因此DELETE
,虽然删除行不会释放磁盘空间。为此,我们需要VACUUM
运行。
我已经查询过pg_stat_user_tables
并且VACUUM
似乎从未运行过。
我从各种文档中了解到的(http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html):
FULL
,并且不需要对表进行排他锁。有没有人有任何想法为什么自动真空不运行?这纯粹是因为桌子一直很忙吗?
在这种情况下是否值得VACUUM
在each之后DELETE
运行(每 10 分钟运行一次)?
编辑:
使用以下 SO 链接中的 SQL 进行查询:
-[ RECORD 2 ]---+---------------------------
schemaname | stats
relname | statistic_values_by_sec
last_vacuum |
last_autovacuum |
n_tup | 932,315,264
dead_tup | 940,727,818
av_threshold | 186,463,103
expect_av | *
Run Code Online (Sandbox Code Playgroud)
和原始输出:
-[ RECORD 3 ]-----+---------------------------
relid | 501908
schemaname | stats
relname | statistic_values_by_sec
seq_scan | 12
seq_tup_read | 4526762064
idx_scan | 29643
idx_tup_fetch | 2544206912
n_tup_ins | 1573896877
n_tup_upd | 0
n_tup_del | 941176496
n_tup_hot_upd | 0
n_live_tup | 688858417
n_dead_tup | 940727818
last_vacuum |
last_autovacuum |
last_analyze |
last_autoanalyze | 2014-08-09 01:36:21.703+01
vacuum_count | 0
autovacuum_count | 0
analyze_count | 0
autoanalyze_count | 69
Run Code Online (Sandbox Code Playgroud)