J'ai besoin d'effectuer une mise à jour simple sur toutes les lignes d'une table. La table a 40 à 50 millions de lignes. Déposer des index et des contraintes au cours de l'UPDATE
donne une amélioration massive des performances.
Mais qu'en est-il d'Autovacuum? Peut-on démarrer un VACUUM
ou ANALYZE
au milieu d'un UPDATE
? Si oui, ce serait un travail inutile qui mangerait des ressources de la machine. Je pourrais le désactiver sur la table avant le UPDATE
, puis le réactivez ensuite:
ALTER TABLE my_table
SET (autovacuum_enabled = false, toast.autovacuum_enabled = false);
-- Drop constraints, drop indexes, and disable unnecessary triggers
UPDATE my_table SET ....;
-- Restore constraints, indexes, and triggers
ALTER TABLE my_table
SET (autovacuum_enabled = true, toast.autovacuum_enabled = true);
Cela fonctionne-t-il même si je ne vous engagez pas après le premier ALTER
?
De plus, si je le désactive pendant le UPDATE
, cela déclenche-t-il après la mise à jour, ou ignorera-t-il ces mises à jour car elle était désactivée pendant leur handicap? (Ma suspicion est que cela fonctionnera, mais je préfère être sûr.)
J'utilise PG 9.3 en ce moment, mais devriez-vous passer prochainement. Donc, toute mention des changements de versions plus récentes est appréciée.
Il n'y a tout simplement aucun point. autovacuum
_ ne nettoiera pas de lignes verrouillées dans une transaction en cours d'exécution. Alors autovacuum
Mais cela ne bloquera pas et ne ralentira pas la mise à jour d'un sens significatif que je suis au courant.