Maison > base de données > tutoriel mysql > Comment purger efficacement les objets SqlDependency expirés de la mémoire SQL Server ?

Comment purger efficacement les objets SqlDependency expirés de la mémoire SQL Server ?

DDD
Libérer: 2025-01-15 11:53:47
original
493 Les gens l'ont consulté

How to Effectively Purge Expired SqlDependency Objects from SQL Server Memory?

Effacer les objets SqlDependency expirés de la mémoire SQL Server

L'utilisation d'objets SqlDependency dans SQL Server nécessite une gestion minutieuse pour éviter les fuites de mémoire dues aux dépendances expirées. Cet article détaille les stratégies efficaces pour gérer cela.

Comprendre les limites du nettoyage de SqlDependency

SqlDependency ne supprime pas automatiquement les connexions expirées. Même après que Stop() est appelé et que les objets SqlCommand et SqlConnection associés sont libérés, les groupes de conversation et les points de terminaison persistent dans la base de données. Cette accumulation consomme une mémoire serveur importante.

Requête SQL pour le nettoyage manuel

Pour effacer manuellement les points de terminaison de conversation inutilisés et libérer de la mémoire, exécutez ce code SQL dans votre base de données :

<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

Alternative : la classe SqlDependencyEx

Envisagez d'utiliser la classe SqlDependencyEx open source. Il exploite les déclencheurs de base de données et les notifications natives de Service Broker pour les événements de modification de table, offrant plusieurs avantages :

  • Nettoyage automatique des dépendances expirées.
  • Suivi complet des modifications, y compris les événements lors du réabonnement.

Exemple d'utilisation de SqlDependencyEx

<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 processing.
    Thread.Sleep(1000);
}

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

L'utilisation de ces méthodes garantit une gestion efficace de la mémoire pour les objets SqlDependency et des performances optimales des applications 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal