46

sp_reset_connection は SQL Server 接続プールによって呼び出され、プールから再利用された接続の設定のほとんどがリセットされるようにします。誰かがそれが何をし、何をしないかを正確に知っていますか?

たとえば、この投稿から、トランザクション分離レベルがリセットされないことがわかります

4

2 に答える 2

74

ODBC、OLE-DB、SqlClient などのデータ アクセス API のレイヤーは、接続プールからの接続を再利用するときに、(内部) ストアド プロシージャ sp_reset_connection を呼び出します。これは、再利用される前に接続の状態をリセットするために行われます。

何がリセットされるかについての公式文書はないようですが、非公式のリストを次に示します。

sp_reset_connection は、接続の次の側面をリセットします。

  • すべてのエラー状態と番号をリセットします (@@error など)
  • 並列クエリを実行する親 EC の子スレッドであるすべての EC (実行コンテキスト) を停止します。
  • 未処理の未処理の I/O 操作を待機します。
  • 接続によってサーバー上に保持されているバッファーを解放します
  • 接続で使用されているバッファ リソースのロックを解除します。
  • 接続が所有する割り当てられたすべてのメモリを解放します
  • 接続によって作成された作業テーブルまたは一時テーブルがクリアされます
  • 接続が所有するすべてのグローバルカーソルを強制終了します
  • 開いている SQL-XML ハンドルを閉じます。
  • 開いている SQL-XML 関連の作業テーブルをすべて削除します。
  • すべてのシステムテーブルを閉じます
  • すべてのユーザーテーブルを閉じます
  • すべての一時オブジェクトを削除します
  • 開いているトランザクションを中止します
  • 参加すると分散トランザクションから離脱します
  • 現在のデータベース内のユーザーの参照カウントを減らします。共有データベース ロックを解除する
  • 取得したロックを解放します
  • 取得された可能性のあるハンドルを解放します
  • すべてのSETオプションをデフォルト値にリセットします
  • @@rowcount 値をリセットします
  • @@identity 値をリセットします
  • dbcc traceon() を使用して、セッション レベルのトレース オプションをリセットします。

sp_reset_connection はリセットされません:

  • セキュリティ コンテキスト。これが、接続プーリングが正確な接続文字列に基づいて接続を照合する理由です。
  • アプリケーション ロールは元に戻すことができないため、sp_setapprole を使用してアプリケーション ロールを入力した場合
  • トランザクション分離レベル
于 2009-02-27T20:01:31.250 に答える
-1

このフォーラムの投稿から:

sp_reset_connection ストアド プロシージャは、接続をリセットするために使用されます。これにより、接続がプールで使用されるときに、接続固有の以前のセッションから何も保存されなくなります。

于 2009-02-27T20:02:22.713 に答える