Maison >base de données >tutoriel mysql >Comment SQL Server peut-il gérer efficacement le traitement simultané des files d'attente sur plusieurs clients ?
Utilisation de SQL Server comme file d'attente de base de données avec traitement simultané de plusieurs clients
La capacité de traiter efficacement les commandes d'une file d'attente simultanément sur plusieurs clients est essentiel lors de l’utilisation de SQL Server comme file d’attente de base de données. Pour y parvenir, certaines configurations et optimisations de requêtes doivent être mises en œuvre.
Une approche consiste à utiliser un verrou pessimiste avec une requête telle que :
select top 1 COMMAND from EXAMPLE_TABLE with (UPDLOCK, ROWLOCK) where PROCESSED=false;
Cependant, cette stratégie peut conduire à des conflits entre plusieurs les travailleurs tentent d'acquérir le même verrou de rangée. Une solution plus efficace consiste à exploiter la clause OUTPUT, introduite dans SQL Server 2005.
La clause OUTPUT permet des opérations de retrait atomique de la file d'attente. Il facilite la recherche de la ligne appropriée, l'ignorance des lignes verrouillées et le marquage de la ligne sélectionnée comme sortie de la file d'attente en une seule opération :
with CTE as ( SELECT TOP(1) COMMAND, PROCESSED FROM TABLE WITH (READPAST) WHERE PROCESSED = 0) UPDATE CTE SET PROCESSED = 1 OUTPUT INSERTED.*;
Pour des performances optimales, il est crucial de structurer la table avec la clé d'index groupée la plus à gauche sur le Colonne TRAITÉ. Si un ID existe en tant que clé primaire, il doit être déplacé vers la deuxième colonne de la clé clusterisée. De plus, il est recommandé d'éviter d'utiliser des index non clusterisés sur des files d'attente.
CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);
De plus, il est important de s'abstenir d'utiliser la table pour des opérations d'aperçu ou à double usage comme file d'attente et magasin. Ces pratiques peuvent entraîner des blocages et une réduction du débit.
En adhérant au processus de retrait atomique de la file d'attente, en utilisant l'indicateur READPAST et en implémentant une table correctement structurée, il est possible d'obtenir un débit élevé sous des charges extrêmement concurrentes lors de l'utilisation de SQL Server. comme une file d'attente DB avec plusieurs clients.
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!