PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 06/01/2014 18:07:41

tsn77130
Membre

fonctionnement des inxdexs

Bonjour à tous,

Je cherche à remplacer certains indexs de ma base trop bloatés par des indexs recréés via un "create index concurrently" , suivi d'un "drop index idx ; alter index idx_new rename to idx" englobé dans une transaction.

Je me pose une question sur comment la base fonctionne pendant le laps de temps ou les 2 indexs coexistent, le temps que le drop / rename ait eu lieu.
Comment la base sait quel index elle doit interroger ?
Est ce que cela peut poser des problèmes ?

Merci

Hors ligne

#2 07/01/2014 00:00:23

gleu
Administrateur

Re : fonctionnement des inxdexs

S'il s'agit exactement du même index (même déclaration), PostgreSQL utilisera le plus petit (donc à priori le nouveau, si vous craignez le bloat). Si vous faites tous dans une transaction, cela peut poser quelques soucis à cause des verrous posés. Cela étant dit, je ne vois pas l'intérêt d'englober ces ordres dans une transaction. En fait, je vois des inconvénients mais aucun avantage... pour le dire autrement, je ne le ferais pas smile


Guillaume.

Hors ligne

#3 07/01/2014 09:55:25

tsn77130
Membre

Re : fonctionnement des inxdexs

Oui, il s'agit du même index, le but étant de ne pas voir mes indexs grandir indéfiniment en terme d'espace disque notamment.
Je n'avais pas réussi à trouver cette information dans la doc...

Je ne fais pas tout dans une transaction, juste le drop de l'ancien index et le rename du nouveau (toto_idx_new) pour lui donner le nom de l'ancien (toto_idx), dans le but d'éviter le cas de figure ou le drop se passe bien, et le rename non. (et donc dans ce cas, et si je vous suit bien, mon index sera tout de même fonctionnel, il n'aurait juste pas le bon nom ?)

Hors ligne

#4 07/01/2014 17:56:36

gleu
Administrateur

Re : fonctionnement des inxdexs

Oui, il aura juste l'ancien nom.


Guillaume.

Hors ligne

#5 08/01/2014 10:57:18

Re : fonctionnement des inxdexs

Bonjour
Quelles sont les avantages de cette méthode par rapport à REINDEX
Merci d'avance.

Hors ligne

#6 09/01/2014 00:10:32

rjuju
Administrateur

Re : fonctionnement des inxdexs

Bonjour,

le CREATE INDEX CONCURRENTLY suivi d'un DROP INDEX permet de ne pas bloquer la table durant la reconstruction.

Hors ligne

#7 09/01/2014 20:29:16

Re : fonctionnement des inxdexs

Bonjour
Merci de la réponse

Hors ligne

#8 23/01/2014 18:20:42

tsn77130
Membre

Re : fonctionnement des inxdexs

bonjour,

j'ai mis en place cette solution depuis quelques jours et elle fonctionne bien, et ce jour, j'ai eu un soucis lors du drop d'un index (non utilisé du coup, comme un nouvel index avait été créé) : la requete a mis beaucoup de temps a s’exécuter, et a mis en Wait toutes les requêtes suivantes.

Pourriez vous m'expliquer pourquoi cela se produit ?

Merci d'avance !

Hors ligne

#9 24/01/2014 17:57:03

rjuju
Administrateur

Re : fonctionnement des inxdexs

Bonjour,

la commande CREATE INDEX CONCURRENTLY peut parfois échouer, auquel cas le nouvel index sera marqué comme non valide et la suppression de l'ancien index sera bloquante. Peut-être est-ce la cause de votre soucis.

Hors ligne

#10 27/01/2014 18:17:58

tsn77130
Membre

Re : fonctionnement des inxdexs

Bonjour rjuju, merci pour le retour.
Le problème vient en fait du temps que met postgres pour fixer un exclusive lock sur la table avant de pouvoir drop l'index.
Pour info si cela en intéresse certains, il a été rajouté une option concurrently sur le drop à partir de la 9.2

Hors ligne

Pied de page des forums