Мы используем Postgres 9.2 в Windows для хранения низкочастотных временных рядов: мы вставляем около 2000 строк в секунду каждую секунду 24 часа, 7 дней в неделю без простоев. Существует DELETE
таблица, которая запускается на столе каждые 10 минут или около того, чтобы поддерживать длину таблицы на фиксированном количестве дней. В итоге получается довольно стабильный 900 миллионов строк. (Для тех , кто заинтересован, SELECT
, INSERT
, DELETE
все производительный).
Таким образом DELETE
, удаление строк не освобождает дисковое пространство. Для этого нам нужно VACUUM
бежать.
Я запрашиваю pg_stat_user_tables
и, VACUUM
кажется, никогда не запускался.
Что я понимаю из разных документов ( http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html ):
- у нас, кажется, есть авто-пылесос, и он работает на других столах.
- Авто-вакуум не работает
FULL
, и не должен требовать эксклюзивной блокировки на столе.
У кого-нибудь есть мысли, почему не работает авто-вакуум? Это только потому, что стол постоянно занят?
И стоит ли запускать VACUUM
после каждого DELETE
в этом случае (который запускается каждые 10 минут)?
Редактировать:
Запрос с использованием SQL по ссылке SO ниже:
-[ 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 | *
и сырой выход:
-[ 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
select * from pg_stat_user_tables
для этой таблицы (используйте\x
в psql для красиво отформатированного вывода)