web-dev-qa-db-fra.com

Postgres Long Base de données Halte AutoVacuum

J'ai une table assez grande (1 million de lignes) et ma base de données est bloquée sur un autovacuum (> 30 minutes) sur la présente table, ce qui entraîne une cachet de toute la base de données. L'application ne se chargea même pas maintenant.

-00:37:31.137859 autovacuum: VACUUM public.users
SELECT n_tup_del, n_tup_upd FROM pg_stat_all_tables WHERE relname = 'users';

enter image description here

Ce sont mes paramètres Autovacuum sur la table des utilisateurs:

autovacuum_vacuum_scale_factor=0.0, 
autovacuum_vacuum_threshold=5000,
autovacuum_analyze_scale_factor=0.0,
autovacuum_analyze_threshold=5000

Ces paramètres suggérés que j'ai utilisés à partir de Slow Slow PostgreSQL Performance? N'oubliez pas d'aspirer votre base de données

Est-ce que je dois juste l'attendre? Quelles sont mes options?

Mise à jour

J'ai mis à niveau vers Postgres 9.5 et j'ai également augmenté mes IOPS RDS à 900 et que le processus de vide matine toujours les iops et ne peut rien faire d'autre dans la base de données. Le processus fonctionnait pendant un point 1 jour avant la mise à niveau.

J'ai également supprimé les paramètres d'autovacuum personnalisés que j'ai eues, et maintenant simplement utiliser la valeur par défaut.

Voici une attachement des résultats de ces requêtes;

SELECT * FROM pg_stat_activity;
SELECT * FROM pg_stat_database;
SELECT * FROM pg_stat_user_tables;
SELECT * FROM pg_stat_user_indexes;
SELECT * FROM pg_locks;

http://www.filedropper.com/output_5

7
Andrew Cetinic

VACUUM _ Processus lancés par Autovacuum peut être tué en toute sécurité avec:

SELECT pg_terminate_backend(PID_of_backend);

En fait, tout processus client dans PostgreSQL peut être résilié de cette façon. Les travaux non engagés par ce backend seront simplement supprimés.

Vous pouvez ensuite réexécuter VACUUM manuellement à un temps de circulation bas:

VACUUM VERBOSE users;

Vérifiez si Délai de vide basé sur des coûts peut vous aider. Cela limiterait la quantité d'E/S que votre processus Autovacuum utilise.

Peut-être que vous frappez simplement votre limite d'iops. Vous devriez être capable de voir les chiffres sur l'interface AWS. Sur l'utilisation de Linux autonome iostat -dtkxy 10 Pour mesurer les E/S. (iostat est généralement emballé dans sysstat paquet).

Peut-être que le VACUUM recommence si souvent à cause des paramètres agressifs de votre config.

5
filiprem