Traitement simultané à partir d'une file d'attente SQL Server
Lors de l'utilisation d'une table comme file d'attente, sa configuration pour un traitement simultané par plusieurs clients peut être difficile . Sans configuration appropriée, plusieurs nœuds de calcul peuvent tenter de traiter la même ligne, ce qui entraîne des conflits.
Contrôle de concurrence optimiste :
La requête fournie tente initialement d'obtenir un verrou pessimiste. sur la ligne à traiter, permettant à un seul travailleur d'y accéder. Cependant, cette approche peut entraîner une attente prolongée et une concurrence réduite.
Contrôle de concurrence pessimiste avec clause de sortie :
SQL Server 2005 a introduit la clause OUTPUT, qui permet plus d'informations. concurrence pessimiste efficace :
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM EXAMPLE_TABLE WITH (READPAST) WHERE PROCESSED = 0 ) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
Cette requête trouve le premier ligne non traitée à l'aide de l'indicateur READPAST, en ignorant les lignes verrouillées. Il met ensuite à jour la ligne, en définissant PROCESSED sur 1. La clause OUTPUT renvoie la ligne mise à jour, qui est traitée par le client.
Configuration de la table :
Pour optimiser cela approche, la table doit être structurée avec la colonne PROCESSED comme première colonne de l'index clusterisé. Cela garantit que les lignes sont classées par statut de traitement.
Index clusterisés et non clusterisés :
Bien qu'un index non clusterisé sur la colonne ID puisse être pris en compte, il n’est généralement pas recommandé pour les files d’attente très utilisées. En effet, les index non clusterisés peuvent introduire une surcharge et une complexité supplémentaires.
Restrictions de requête :
Pour des performances optimales, l'interrogation de la table de file d'attente doit être limitée à l'opération Dequeue. , en évitant les opérations Peek ou en utilisant la table à la fois à des fins de mise en file d'attente et de stockage de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!