"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment SQL Server peut-il être utilisé comme file d’attente simultanée pour plusieurs clients ?

Comment SQL Server peut-il être utilisé comme file d’attente simultanée pour plusieurs clients ?

Publié le 2024-12-23
Parcourir:152

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

Utilisation de SQL Server comme file d'attente simultanée avec plusieurs clients

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 verrou 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 effectue les étapes suivantes de manière atomique :

  1. Utilise l'indicateur AVEC (READPAST) pour ignorer les lignes verrouillées.
  2. Sélectionne le haut ligne avec PROCESSED=0.
  3. Mise à jour la ligne sélectionnée pour la marquer comme traitée (PROCESSED=1).
  4. Sort la ligne mise à jour, qui peut être utilisée par le travailleur pour le traitement.

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);

Éviter 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 de 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3