12. Problèmes de verrous

L'un des avantages de PostgreSQL™ et de son contrôle d'accès simultané (« Multi-Version Concurrency Control », nommé MVCC par la suite) est qu'il élimine de nombreuses raisons de verrouiller les objets de base de données. Sur certains systèmes de gestion de bases de données, vous devez verrouiller une table lorsque vous souhaitez insérer des données dans celle-ci ; cela peut gêner sévèrement les performances. Sur d'autres systèmes, les lectures bloquent les écritures concurrentes. Avec MVCC, PostgreSQL™ supprime toute une catégorie de verrous, dans le sens où les « vieilles lectures » peuvent accéder aux « anciennes lignes ». La plupart du temps, cela évite aux utilisateurs de PostgreSQL™ de trop se préoccuper des verrous. Les événements de configuration de Slony-I™ récupèrent habituellement des verrous sur une table interne, sl_config_lock, qui ne devrait pas être visible pour les applications à moins que ces dernières doivent exécuter des actions sur les composants Slony-I™.

Malheureusement, il existe plusieurs sortes d'événements Slony-I™ qui nécessitent des verrous exclusifs sur les tables PostgreSQL™, ce qui entraine que la modification de la configuration Slony-I™ peut provoquer des « verrous gênants ». En particulier :

Chacune de ces actions nécessite, à un certain de point, de modifier chaque table de l'ensemble de réplication, ce qui implique l'acquisition d'un verrou exclusif sur les tables. Certains utilisateurs ont tenté d'effectuer ces opérations sur des nœuds qui étaient activement sollicités par la couche applicative ; ils ont rencontré des problèmes d'inter-blocages (« deadlocks ») et/ou des arrêts de réplication.

La question évident est : « que faire pour éviter ces inter-blocages ? »

Plusieurs possibilités sont envisageables :

Malheureusement, il n'y a pas de solution miracle. S'il est nécessaire de soumettre une requête SLONIK MOVE SET(7), alors il est probablement nécessaire d'accepter une courte coupure de service. Au fur et à mesure que les relations entre Slony-I™ et pgpool s'améliorent, ce couple semble être la meilleure méthode pour éviter les inter-blocages.