web-dev-qa-db-fra.com

Exigence d'espace disque pour Reindex dans PostgreSQL

Il y a un serveur avec POSTRES 13 à court d'espace disque.

Il contient une table metrics qui occupe 90% de l'ensemble de la base de données. J'ai supprimé d'anciens enregistrements dans ce tableau. En raison de cette table est utilisée dans la production, je ne peux pas exécuter "métriques complètes sous vide". Depuis que je ne peux pas me permettre de le bloquer.

Après avoir supprimé d'anciens enregistrements, je veux REINDEX CONCURRENTLY index ballonnés à l'espace libre. Mais tout d'abord, j'aimerais savoir combien d'espace est nécessaire pour les réindex Si le serveur est hors de l'espace, Postgres se bloque.

Donc, est-il possible de calculer une condition d'espace pour Reindex dans PostgreSQL?

1
Andrei

Jusqu'à trois fois plus que la taille de Nouveau Index:

  • structure d'index elle-même
  • Enregistrements WAL pendant la création d'index
  • fichiers temporaires lors du tri des valeurs d'index

J'ai supprimé d'anciens enregistrements dans ce tableau

Il est possible de récupérer l'espace à l'aide de l'outil pgcompacttable . pgcompacttable a été conçu spécifiquement pour la compression des tables en cas de suffisamment d'espace pour une copie de la table.

Pendant un update ou insert, PostgreSQL écrira la nouvelle version du tuple dans un espace libre au début de la table. Par conséquent, si nous mettons à jour tous les tuples à la fin de la table, le vide suivant ne trouvera que des pages vides à la fin de la table sans données réelles (en direct) et ne renvoient que ces pages au système de fichiers. Donc, la taille de la table sur le disque sera réduite. PGCompacalistable effectue Exactement telle updates + vacuum.

2
Melkij