Heim > Datenbank > MySQL-Tutorial > Wie kann man abgelaufene SqlDependency-Objekte effektiv aus dem SQL Server-Speicher löschen?

Wie kann man abgelaufene SqlDependency-Objekte effektiv aus dem SQL Server-Speicher löschen?

DDD
Freigeben: 2025-01-15 11:53:47
Original
451 Leute haben es durchsucht

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

Löschen abgelaufener SqlDependency-Objekte aus dem SQL Server-Speicher

Die Verwendung von SqlDependency-Objekten in SQL Server erfordert eine sorgfältige Verwaltung, um Speicherlecks durch abgelaufene Abhängigkeiten zu verhindern. In diesem Artikel werden wirksame Strategien zur Bewältigung dieses Problems beschrieben.

Grundlegendes zu den Bereinigungseinschränkungen von SqlDependency

SqlDependency entfernt abgelaufene Verbindungen nicht automatisch. Auch nachdem Stop() aufgerufen und zugeordnete SqlCommand- und SqlConnection-Objekte freigegeben wurden, bleiben Konversationsgruppen und Endpunkte in der Datenbank bestehen. Diese Anhäufung verbraucht erheblichen Serverspeicher.

SQL-Abfrage für manuelle Bereinigung

Um nicht verwendete Konversationsendpunkte manuell zu löschen und Speicher freizugeben, führen Sie diesen SQL-Code in Ihrer Datenbank aus:

<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>
Nach dem Login kopieren

Alternative: Die SqlDependencyEx-Klasse

Erwägen Sie die Verwendung der Open-Source-SqlDependencyEx-Klasse. Es nutzt Datenbankauslöser und native Service Broker-Benachrichtigungen für Tabellenänderungsereignisse und bietet mehrere Vorteile:

  • Automatische Bereinigung abgelaufener Abhängigkeiten.
  • Umfassende Änderungsverfolgung, einschließlich Ereignissen während der Erneuerung des Abonnements.

Beispiel für die Verwendung von 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>
Nach dem Login kopieren

Der Einsatz dieser Methoden gewährleistet eine effiziente Speicherverwaltung für SqlDependency-Objekte und eine optimale SQL Server-Anwendungsleistung.

Das obige ist der detaillierte Inhalt vonWie kann man abgelaufene SqlDependency-Objekte effektiv aus dem SQL Server-Speicher löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage