1. ホーム
  2. sql-server

[解決済み] Sql Server Profiler の "exec sp_reset_connection" はどういう意味ですか?[重複している]。

2022-04-21 19:12:29

質問

Sql Profiler が "sp_reset_connection" を出力することの意味を理解しようとしています。

私は次の、"exec sp_reset_connection" 行に続いて、BatchStarting と Completed があります。

RPC:Completed       exec sp_reset_connection
SQL:BatchStarting   SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]
SQL:BatchCompleted  SELECT [c].[TestID] AS [TestID], [c].[Description] AS [Description] FROM [dbo].[Test] AS [c]    

基本的に、最初の行 "exec sp_reset_connection" は、すべてのプロセス(接続が開かれ、select stmt が実行され、接続が閉じられプールに戻される)が行われたことを意味しますか。 それとも、私の接続はまだ開いたままなのでしょうか?

そして、なぜsp_reset_connectionは私のselect文の前に実行されるのでしょうか?

接続がいつ開かれ、いつ閉じられたかをもっと詳しく知る方法はないのでしょうか?

exec sp_reset_connection" を見るということは、接続が終了したということでしょうか?

解決方法は?

他の回答にもあるように sp_reset_connection は、接続プールが再利用されていることを示します。ある特定の結果に注意してください

<ブロッククオート

ジミー・メイズのMSDNブログ は言った。

sp_reset_connectionは、次のようにリセットしません。 トランザクション分離レベルを サーバーのデフォルトであり、以前の 接続の設定です。

アップデイト : SQL 2014 から、TDS バージョン 7.3 以降のクライアントドライバーでは、トランザクション分離レベルはデフォルトにリセットされます。

を参照してください。 SQL Server プールされた接続での分離レベルのリーク

以下は追加情報です。

sp_reset_connectionは何をするのですか?

ODBCのようなデータアクセスAPIのレイヤー。 OLE-DB、System.Data.SqlClientはすべて は、(内部)ストアドプロシージャ sp_reset_connectionを再利用する場合。 接続プールからの接続 これは の状態をリセットするために行います。 接続が再利用される前に しかし、どのような がリセットされます。この記事では の部分を文書化する。 接続がリセットされます。

sp_reset_connection は、次のようにリセットします。 接続の以下の側面。

  • すべてのエラーの状態および番号 (@@error のような)

  • すべてのEC(実行コンテキスト)を停止する。 親ECの子スレッドである 並列クエリを実行している

  • 未処理のI/Oを待ちます。 を実行します。

  • に保持されているバッファを解放する。 接続によってサーバーに

  • バッファリソースのロックを解除する 接続によって使用される

  • 割り当てられたすべてのメモリ 接続が所有する

  • 作業用または一時的な によって作成されるテーブルを 接続

  • が所有するすべてのグローバルカーソルを削除します。 接続

  • 開いている SQL-XML ハンドルをすべて閉じる

  • 開いている SQL-XML 関連ワークテーブルをすべて削除します。

  • すべてのシステムテーブルをクローズする

  • すべてのユーザーテーブルを閉じる

  • すべてのテンポラリオブジェクトを削除します。

  • 開いているトランザクションを中止する

  • 分散処理されたトランザクションの不具合(エンリステッド時

  • 参照回数を減らす 現在のデータベースのユーザーに対して データベースの共有ロックを解放する

  • 取得したロックの解放

  • 取得したハンドルの解放

  • すべてのSETオプションをデフォルト値にリセットする

  • 行数の値をリセットする

  • ID 値をリセットする

  • セッションレベルのトレース オプションは、dbcc traceon()を使用します。

  • CONTEXT_INFO をリセットします。 NULL SQL Server 2005 以降の場合 <サブ [ 元記事の一部ではありません ]。

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

  • セキュリティコンテキスト、その理由は コネクションプーリングは 正確な接続文字列に基づいて

  • を使用して入力したアプリケーションロール sp_setapprole SQL Server 2005 以前には、アプリケーションのロールを元に戻すことができなかったからです。SQL Server 2005 以降、アプリケーションのロールは元に戻すことができますが、セッションの一部ではない追加情報のみが必要となります。接続を閉じる前に、アプリケーションのロールを手動で戻すには sp_unsetapprole のときに取得される "cookie" 値を使用しています。 sp_setapprole が実行される。

注:このリストは、常に移り変わるウェブの中で失われてほしくないので、ここに載せています。