Dans un scénario où une table sert de file d'attente, il est crucial de la configurer et de l'interroger de manière qui permet à plusieurs clients de traiter simultanément les éléments de la file d'attente.
Lors de l'utilisation du verrouillage de ligne pessimiste avec UPDLOCK et ROWLOCK, un seul travailleur peut acquérir le verrouiller et traiter une ligne. Pour résoudre ce problème et activer le traitement simultané, envisagez l'approche suivante :
Implémentation de file d'attente à l'aide de la clause OUTPUT
La clause OUTPUT fournit un mécanisme permettant de récupérer et de modifier atomiquement une ligne. . Voici comment implémenter une file d'attente à l'aide de la clause OUTPUT :
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
Cette requête exécute les étapes suivantes de manière atomique :
Optimisation de l'index clusterisé
Pour optimiser davantage les performances, il est crucial de créer un index clusterisé sur la colonne PROCESSED. Cela garantit que les données sont stockées dans l'ordre de traitement.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
Évitez les requêtes non standard
Pour un débit optimal, il est essentiel d'éviter d'interroger la table de file d'attente à l'aide méthodes autres que l’opération de retrait de file d’attente décrite ci-dessus. Tenter de jeter un coup d'œil ou d'utiliser la table à des fins supplémentaires peut introduire des blocages et une dégradation des performances.
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!