PostgreSQL Créez un index simultanément

PostgreSQL Créez un index simultanément
De nombreux utilisateurs aiment utiliser PostgreSQL car il permet d'exécuter plusieurs opérations simultanément. Cependant, différents scénarios appellent les Postgres à bloquer une opération jusqu'à ce que celui qui s'exécute soit terminé avant d'exécuter un autre.

Postgres repose sur différentes serrures pour garantir que toutes les transactions peuvent s'exécuter comme prévu. La transaction qui obtient d'abord une serrure doit être terminée. À moins qu'un recul ou un engagement ne soit effectué, une autre transaction ne peut pas avancer en raison du verrouillage. Notre objectif aujourd'hui est de comprendre comment créer des index simultanément pour éviter le verrouillage.

Comment fonctionne le verrouillage

Avant de plonger dans la création d'index simultanément, il vaut la peine de comprendre comment Postgres implémente les verrous et voir comment ils affectent la transaction à moins que vous ne sachiez comment y faire face.

Pour ce cas, nous créons une table et inirions une transaction pour modifier la table pour ajouter une nouvelle colonne. À partir de l'image suivante, nous pouvons voir qu'une fois que la transaction alter a obtenu la main sur le verrou en tant que première transaction, la commande select ne répond pas dans le deuxième shell PSQL.

Ce cas se produit parce que la première transaction émet un verrouillage. Vous rencontrerez un cas similaire lorsque vous ne parviendrez pas à indexer simultanément, comme nous le verrons dans la dernière section.


Cependant, lorsque vous émettez une commande Rollback à la première transaction, nous pouvons immédiatement remarquer que le verrou est libéré. Maintenant, la deuxième transaction peut se dérouler sans interruption.

C'est ainsi que les verrous fonctionnent sur les tables. Bloque des transactions de lecture et d'écriture lorsqu'une commande DDL est exécutée. Avec cette compréhension, nous pouvons passer à la création d'index simultanément.

Comment utiliser PostgreSQL pour créer un index simultanément

Lors de la création d'index sur PostgreSQL, l'opération peut rapidement bloquer toutes les autres transactions et entraîner des pertes. Lors de l'indexation d'un tableau, Postgres le verrouille par rapport aux opérations d'écriture, telles que les opérations de mise à jour et de modification, jusqu'à ce que la construction d'index termine.

La transaction d'index pourrait prendre des heures ou de longues minutes, selon la taille de votre base de données. Verrouiller d'autres transactions dans un environnement de production signifie que le système peut être rendu inutilisable jusqu'à ce que la construction d'index termine. Si vous avez un tel scénario, la meilleure solution est de créer des index simultanément, ce qui supprimera les verrous.

L'indexation garantit simultanément qu'une transaction ne bloquera pas d'autres transactions. Ainsi, des transactions normales peuvent se produire au milieu d'un processus de construction. Lorsque vous ajoutez simultanément lors de l'indexation, PostgreSQL scanne le tableau indexé et attend toutes les transactions pour résilier. Ainsi, l'indexation va simultanément, mais garantit qu'aucun retard n'est rencontré dans un environnement de production. Voyons un exemple d'indexation normale pour comprendre comment le verrouillage peut provoquer le chaos dans un environnement de production.


Ici, nous avons un tableau nommé «Détails» dans lequel nous avons accédé sur notre coquille de Postgres. Supposons que nous voulons créer un index «btree» sur une colonne. Nous pouvons exécuter la commande suivante:

Notre index est créé avec succès car nous avons affaire à une petite table.

Cependant, la même commande pourrait prendre des heures à exécuter si vous êtes dans un environnement de production en direct. Si vous ouvrez un autre shell PSQL et essayez d'écrire à la même table, le shell ne répondra pas jusqu'à la fin de l'indexation. Si quelqu'un essaie de mettre à jour, d'insérer ou d'effectuer une autre opération d'écriture, il sera verrouillé.

Un tel scénario peut être corrigé en indexant le même tableau simultanément. Ce qui suit est la syntaxe pour créer un index simultanément:

Créer un index index simultanément sur le nom de table (nom de colonne)


Si nous voulons répéter le même index que nous avons fait plus tôt mais, dans ce cas, simultanément, notre nouvelle commande serait la suivante:

Dans ce cas, si l'indexation prend plus de temps et que nous ouvrons un autre shell pour effectuer une opération d'écriture dans le tableau que nous indexons, nous ne pouvions pas obtenir d'erreur de verrouillage car la construction d'index est effectuée simultanément.

Vous pouvez également créer un «index simultané» en ajoutant le mot-clé «unique». L'indexation unique élimine les erreurs de redondance et augmente chaque fois qu'elle détecte une valeur de colonne redondante.


Voici un exemple d'indexation simultanée unique:

Lorsque vous affichez le tableau d'index, vous remarquerez que l'indexation s'est produite avec succès et vous pouvez voir quelle colonne a l'indexation unique.

# \ d TABLE-NAME;

Conclusion

La création d'un index sans approche simultanée conduit à des transactions de verrouillage et de blocage. Cependant, lorsque vous indexez simultanément, la construction d'index se terminera sans empêcher d'autres transactions de se produire. Cet article vous aide à comprendre comment fonctionne le verrouillage lorsque vous travaillez avec des tables dans Postgres. De plus, nous avons expliqué comment créer un index simultanément pour éviter le verrouillage lorsque vous travaillez avec PostgreSQL.