Maison > base de données > tutoriel mysql > 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 ?

DDD
Libérer: 2024-12-20 04:41:12
original
582 Les gens l'ont consulté

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

Utiliser 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 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.*;
Copier après la connexion

Cette requête exécute les étapes suivantes de manière atomique :

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

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);
Copier après la connexion

É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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal