Verwalten von SqlDependency-Verbindungen für optimale SQL Server-Leistung
Eine ineffiziente Verwaltung von SqlDependency
Objekten in SQL Server kann zu Speicherverlusten und Leistungsengpässen führen. In diesem Artikel werden Strategien zur effektiven Bereinigung dieser Ressourcen nach der Ereignisverarbeitung beschrieben.
Das Problem: Anhäufung von Ressourcen
Mit SqlDependency
werden Konversationsgruppen und Endpunkte innerhalb der Datenbank erstellt. Diese Ressourcen sammeln sich im Laufe der Zeit an und erschöpfen möglicherweise den Speicher, insbesondere in SQL Server Express-Editionen.
Datenbankbereinigungslösung
Das folgende SQL-Skript identifiziert und entfernt inaktive Konversationsendpunkte und gibt so Speicher frei:
<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>
SqlDependency-Einschränkungen
Die Standardklasse SqlDependency
weist Einschränkungen auf:
Eine überlegene Alternative: SqlDependencyEx
SqlDependencyEx
, eine Open-Source-Bibliothek, bietet erweiterte Funktionen:
<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>
Durch den Einsatz des Datenbankbereinigungsverfahrens oder die Migration zu SqlDependencyEx
können Sie SqlDependency
Ressourcen effektiv verwalten, Speicherprobleme verhindern und die SQL Server-Leistung optimieren.
Das obige ist der detaillierte Inhalt vonWie kann ich veraltete SqlDependency-Verbindungen in SQL Server effizient bereinigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!