web-dev-qa-db-fra.com

Différence postgreSQL entre le vide complet et le cluster

J'ai une table avec 200 Go de taille occupée par des données et 180 Go de taille par les 6 index dessus. Il est ballonné à 30%, alors je souhaite récupérer l'espace indésirable occupé par celui-ci. Il est regroupé sur job_id_idx index.

Donc, pour récupérer l'espace, dois-je utiliser la commande cluster ou vacuum full commande?

  1. Quelle est la différence entre cette commande deux?

  2. Est vacuum full commande par une colonne identique à la commande cluster?

  3. L'indice est-il recréé dans les deux commandes?

  4. Dans mon cas, lequel on sera plus rapide?

La version de la base de données PostgreSQL est 9.1

13
Arun P

VACUUM FULL Réécrire l'intégralité du contenu de la table dans un nouveau fichier de disque sans espace supplémentaire, permettant d'être renvoyé dans un espace inutilisé sur le système d'exploitation. Cette méthode nécessite également un espace disque supplémentaire, car il écrit une nouvelle copie de la table et ne libère pas l'ancienne copie avant que l'opération soit terminée. Cela ne devrait généralement être utilisé que lorsqu'une quantité importante d'espace doit être récupérée de la table.

http://www.postgresql.org/docs/9.1/static/sql-vacuum.html

CLUSTER indique PostgreSQL à regrouper le tableau spécifié par Table_Name en fonction de l'index spécifié par index_name. L'index doit déjà avoir été défini sur le nom de la table. Lorsqu'une table est regroupée, elle est physiquement réorganisée en fonction des informations d'index et d'une écluse exclusive d'accès est acquise.

http://www.postgresql.org/docs/9.1/static/sql-cluster.html

également intéressé: is-a-reindex-requis-après-cluster

Mais peut-être que tout ce dont vous avez besoin est un simple REINDEX qui reconstruit un index à l'aide des données stockées dans la table de l'index, remplaçant l'ancienne copie de l'index.

http://www.postgresql.org/docs/9.1/static/sql-reindex.html

8
cptPH