1

この Microsoft Docのシナリオ C では、接続をスコープとする一時テーブルをメモリ最適化テーブルに置き換える方法について説明しています。このスキームは、@@spid がメモリ最適化テーブルの SpidFilter 列と一致するかどうかを判断する関数を呼び出すフィルター セキュリティ ポリシーを使用します。

これは .NET 接続プールで機能しますか? 接続が何度も再利用されると、@@spid は同じ番号を返すと思います。.NET は、sp_reset_connection を呼び出してセッション スコープの一時テーブルをクリアしますが、メモリ最適化テーブルをクリアしたり、@@spid を変更したりしません。たぶん、sys.dm_exec_sessions の session_id を追加して、接続プール環境で機能させることができますか?

4

1 に答える 1

1

Microsoft サポートの助けを借りて、ASP.NET 接続プールについて必要な詳細を入手し、この懸念に答えることができました。確かに、ASP.NET スレッドは同じ SPID を共有しますが、同時に共有することはありません。スレッドは、接続が前のスレッドによって使用されなくなった後にのみ、接続を割り当てられます。接続プーリングは、必要な接続の数を減らすのではなく、接続を開いたり閉じたりする必要がある回数を減らすだけです。

これは接続プールに関する優れたドキュメントですが、その区別はしていません。https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

シナリオ C には特別な注意事項があることに注意してください。– アイワン

一度に接続を使用するスレッドは 1 つだけなので、これで十分です。テーブルが使用後に削除されない場合、別のスレッドが偶然同じ SPID の接続を使用するまで、(特に Azure では貴重な) メモリを消費し続けます。

于 2018-08-24T18:44:02.543 に答える