Nous utilisons Postgres 9.2 sur Windows pour stocker des données de série temporelle basse fréquence: nous insérons environ 2000 lignes par seconde toutes les 24 heures, 7 jours par semaine sans interruption. Il y en a un DELETE
qui s'exécute sur la table toutes les 10 minutes environ pour conserver la longueur de la table à un nombre fixe de jours. Cela finit par être un 900 millions de lignes assez stable. (Pour les personnes intéressées, SELECT
, INSERT
, DELETE
sont tous performants).
En tant que tel DELETE
, la suppression de lignes ne libère pas d'espace disque. Pour cela, nous devons VACUUM
courir.
J'ai interrogé le pg_stat_user_tables
et VACUUM
semble n'avoir jamais couru.
Ce que je comprends de divers documents ( http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html ):
- il semble que le vide automatique soit activé et qu'il fonctionne sur d'autres tables.
- L'aspirateur automatique ne fonctionne pas
FULL
et ne devrait pas nécessiter de verrou exclusif sur la table.
Quelqu'un pense-t-il pourquoi l'auto-vide ne fonctionne pas? Est-ce uniquement parce que la table est constamment occupée?
Et cela vaut la peine de courir VACUUM
après chaque DELETE
dans ce cas (qui s'exécute toutes les 10 minutes)?
Éditer:
Requête en utilisant le SQL du lien SO ci-dessous:
-[ 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 | *
et sortie brute:
-[ 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
pour ce tableau (utiliser\x
en psql pour une sortie bien formatée)