Maison > base de données > tutoriel mysql > Comment puis-je gérer efficacement le traitement simultané d'une table de file d'attente SQL Server ?

Comment puis-je gérer efficacement le traitement simultané d'une table de file d'attente SQL Server ?

Linda Hamilton
Libérer: 2024-12-26 06:34:25
original
883 Les gens l'ont consulté

How Can I Efficiently Handle Concurrent Processing of a SQL Server Queue Table?

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal