Maison > développement back-end > C++ > Comment puis-je purger efficacement les connexions SqlDependency obsolètes dans SQL Server ?

Comment puis-je purger efficacement les connexions SqlDependency obsolètes dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-12 12:47:44
original
150 Les gens l'ont consulté

How Can I Efficiently Purge Stale SqlDependency Connections in SQL Server?

Gestion des connexions SqlDependency pour des performances optimales de SQL Server

Une gestion inefficace des SqlDependency objets dans SQL Server peut entraîner des fuites de mémoire et des goulots d'étranglement des performances. Cet article détaille les stratégies permettant de nettoyer efficacement ces ressources après le traitement des événements.

Le problème : accumuler des ressources

L'utilisation de SqlDependency crée des groupes de conversation et des points de terminaison dans la base de données. Ces ressources s'accumulent au fil du temps, épuisant potentiellement la mémoire, notamment dans les éditions SQL Server Express.

Solution de nettoyage de base de données

Le script SQL suivant identifie et supprime les points de terminaison de conversation inactifs, libérant ainsi de la mémoire :

<code class="language-sql">DECLARE @ConvHandle uniqueidentifier
DECLARE Conv CURSOR FOR
SELECT CEP.conversation_handle FROM sys.conversation_endpoints CEP
WHERE CEP.state = 'DI' or CEP.state = 'CD'
OPEN Conv;
FETCH NEXT FROM Conv INTO @ConvHandle;
WHILE (@@FETCH_STATUS = 0) BEGIN
    END CONVERSATION @ConvHandle WITH CLEANUP;
    FETCH NEXT FROM Conv INTO @ConvHandle;
END
CLOSE Conv;
DEALLOCATE Conv;</code>
Copier après la connexion

Limites des dépendances SQL

La classe standard SqlDependency a des limites :

  • Détection des modifications incohérentes : elle ne capture pas de manière fiable toutes les modifications de la table.
  • Ressources persistantes : les groupes de conversation et les points de terminaison restent indéfiniment, contribuant ainsi à l'accumulation de ressources.

Une alternative supérieure : SqlDependencyEx

SqlDependencyEx, une bibliothèque open source, offre des fonctionnalités améliorées :

  • Suivi fiable des modifications : utilise des déclencheurs de base de données et Service Broker pour une détection plus précise des modifications.
  • Exemple d'utilisation :
<code class="language-csharp">int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Simulate table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Allow time for change notification.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);</code>
Copier après la connexion

En utilisant la procédure de nettoyage de la base de données ou en migrant vers SqlDependencyEx, vous pouvez gérer efficacement les ressources SqlDependency, évitant ainsi les problèmes de mémoire et optimisant les performances de SQL Server.

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