Verrouillage du tableau
En tant qu'utilisateur, vous pouvez explicitement verrouiller des tables, mais vous devez le faire avec beaucoup de prudence car des verrouillages accidentels peuvent avoir un impact sur les utilisateurs et les requêtes sur votre système. Une table est verrouillée implicitement lorsqu'elle fait l'objet d'une opération DDL. Par exemple, une commande drop table est bloquée si quelqu'un exécute une commande select sur la même table (ou vice versa).
Pour les opérations DML concurrentes (commandes de sélection, d'insertion, de mise à jour et de suppression), Netezza Performance Server Server SQL utilise la vérification du graphe de sérialisation, qui est une forme de contrôle optimiste de la concurrence qui n'utilise pas de verrous. Au lieu de cela, s'il y a un conflit de concurrence, Netezza Performance Server SQL annule une (ou parfois plusieurs) des transactions affectées.
- Une commande de sélection sur une table peut être exécutée en même temps qu'une commande de mise à jour, de suppression, d'insertion ou de sélection sur la même table. Les listes d'invisibilité, ainsi que d'autres mécanismes, garantissent que chaque transaction voit un état cohérent.
- Plusieurs commandes d'insertion simultanées peuvent être exécutées sur la même table, à condition qu'aucune d'entre elles ne procède à une sélection dans la même table.
- Les commandes simultanées de mise à jour ou de suppression de différentes tables sont autorisées, moyennant certaines restrictions nécessaires pour garantir la sérialité. Par exemple :
- Si la transaction 1 sélectionne dans la table A et met à jour (ou supprime) la table B, tandis que la transaction 2 sélectionne dans la table B et met à jour la table A, Netezza Performance Server SQL annule l'une ou l'autre (typiquement la transaction qui a démarré le plus récemment). Ce processus est appelé " cas de mise à jour croisée".
- S'il existe un cycle de trois transactions ou plus (la transaction 1 sélectionne dans A et met à jour B, la transaction 2 sélectionne dans B et met à jour C, la transaction 3 sélectionne dans C et met à jour A), Netezza Performance Server SQL annule l'une des transactions du cycle.