ホームページ > バックエンド開発 > C++ > SQL Server メモリから期限切れの SqlDependency オブジェクトをクリーンアップする方法

SQL Server メモリから期限切れの SqlDependency オブジェクトをクリーンアップする方法

Mary-Kate Olsen
リリース: 2025-01-12 12:52:46
オリジナル
514 人が閲覧しました

How to Clean Up Expired SqlDependency Objects from SQL Server Memory?

SQL Server の SqlDependency オブジェクトによって引き起こされるメモリ リークへの対処

SQL Server データの変更を監視するために重要な SqlDependency オブジェクトはメモリに蓄積され、サーバーのパフォーマンスに悪影響を与える可能性があります。 この記事では、これらの期限切れのオブジェクトを効果的に削除する方法について詳しく説明します。

問題を理解する

SqlDependency オブジェクトがイベントをトリガーすると、継続的に監視するために新しいオブジェクトが必要になります。 ただし、古いオブジェクトはメモリ内に残るため、リソースの枯渇につながる可能性があります。

メモリのクリーンアップ手順

次の SQL スクリプトは、非アクティブな会話エンドポイントを特定して終了し、消費されたメモリを解放します。

<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>
ログイン後にコピー

このスクリプトは、切断またはキャンセルされた状態の会話エンドポイントを対象としています。

代替アプローチ: SqlDependencyEx

機能を向上させ、標準の SqlDependency クラスに固有の潜在的な問題を回避するには、オープンソースの代替手段である SqlDependencyEx の使用を検討してください。このソリューションは、データベース トリガーとネイティブの Service Broker 通知を活用します。

SqlDependencyEx を使用した例

これは 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 modifications.
    MakeTableInsertDeleteChanges(changesCount);

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

Assert.AreEqual(changesCount, changesReceived);</code>
ログイン後にコピー

これは、SqlDependencyEx を使用したリアルタイムの変更通知を示しています。

以上がSQL Server メモリから期限切れの SqlDependency オブジェクトをクリーンアップする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート