Traitement client simultané d'une file d'attente SQL Server
Considérons un scénario dans lequel plusieurs clients exécutent simultanément des tâches à partir d'une file d'attente représentée par une table en SQL Serveur. Le défi survient lorsque des requêtes simultanées tentent de verrouiller la même ligne.
Pour résoudre ce problème, l'article recommande la clause OUTPUT introduite dans SQL Server 2005. Cela permet d'exécuter les opérations de retrait de la file d'attente de manière atomique, en ignorant toutes les lignes verrouillées :
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
De plus, structurer la table avec la clé d'index clusterisée la plus à gauche sur la colonne PROCESSED et éviter les clés secondaires non clusterisées Les index sont cruciaux pour des performances optimales dans les opérations simultanées.
De plus, pour maintenir l'intégrité, il est souligné que la table doit principalement servir de file d'attente, évitant ainsi d'autres scénarios d'utilisation qui pourraient conduire à des blocages potentiels et à une dégradation des performances.
En adhérant à ces recommandations, vous pouvez obtenir un traitement simultané à haut débit de tâches en utilisant SQL Server comme mécanisme de mise en file d'attente.
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!