“ exec sp_reset_connection”とはSql Server Profilerの意味ですか? [複製]
質問
この質問にはすでに回答があります:
- sp_reset_connectionの機能 2つの答え
" sp_reset_connection"を発行して、Sql Profilerの意味を理解しようとしています。
「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"です。プロセス全体(接続が開かれ、選択されたstmtが実行され、接続が閉じられてプールに戻される)が行われることを意味しますか?または、私の接続はまだオープンステージです。
そして、なぜ自分のselect文の前にsp_reset_connectionが実行されるのですか、ユーザーのSQLの後にリセットされるべきではないのですか?
接続を開いたときと閉じたときに、より詳細に知る方法がありますか?
" exec sp_reset_connection"を見ると、接続が閉じているということですか?
解決
他の回答と同様に、 sp_reset_connection
は接続プールが再利用されていることを示しています。 1つの特定の結果に注意してください!
Jimmy MaysのMSDNブログ によると:
sp_reset_connectionはリセットしません トランザクション分離レベル 前のサーバーのデフォルト 接続の設定。
更新:SQL 2014以降、TDSバージョン7.3以降のクライアントドライバーの場合、トランザクション分離レベルはデフォルトにリセットされます。
ref: SQL Server:プールされた接続での分離レベルのリーク
追加情報を次に示します。
ODBCなどのデータアクセスAPIのレイヤー、 OLE-DBおよびSystem.Data.SqlClient all (内部)ストアドプロシージャを呼び出す 再使用時のsp_reset_connection 接続プールからの接続。それ の状態をリセットするためにこれを行います 再利用される前の接続、 しかし、何も文書化されていません 物事がリセットされます。この記事は試みます の部分を文書化する リセットされる接続。
sp_reset_connectionは、 接続の次の側面:
すべてのエラー状態と番号 (@@ errorなど)
すべてのEC(実行コンテキスト)を停止します 親ECの子スレッド 並列クエリの実行
未処理のI / Oに対する待機 未処理の操作
上の保持バッファを解放します 接続によるサーバー
バッファリソースのロックを解除します 接続で使用される
割り当てられたすべてのメモリを解放します 接続が所有している
作業または一時をクリアします によって作成されるテーブル 接続
が所有するすべてのグローバルカーソルを削除します。 接続
開いているすべての開いているSQL-XMLハンドルを閉じます
開いているSQL-XML関連の作業テーブルを削除します
すべてのシステムテーブルを閉じます
すべてのユーザーテーブルを閉じます
すべての一時オブジェクトを削除します
開いているトランザクションを中止します
参加時の分散トランザクションの欠陥
参照カウントをデクリメントします 現在のデータベース内のユーザー 共有データベースのロックを解除します
取得したロックを解放します
取得したハンドルをリリースします
すべてのSETオプションをデフォルト値にリセットします
@@ rowcount値をリセットします
@@ identity値をリセットします
セッションレベルのトレースをリセットします dbcc traceon()を使用したオプション
SQL Server 2005以降のCONTEXT_INFOを
NULL
にリセットし、 [元の記事の一部ではない]sp_reset_connectionはリセットされません:
セキュリティコンテキスト、その理由 接続プーリングは接続と一致します 正確な接続文字列に基づいて
入力されたアプリケーションロール アプリケーション以来、sp_setapproleを使用 ロールを元に戻すことはできません
注:一時的なWebでリストが失われないように、ここにリストを含めます。
他のヒント
接続プーリングが使用されていることを示しています(これは良いことです)。
注:
ストアドプロシージャまたはトリガーでSET TRANSACTION ISOLATION LEVELを発行すると、オブジェクトが制御を返すと、分離レベルはオブジェクトが呼び出されたときに有効なレベルにリセットされます。たとえば、バッチでREPEATABLE READを設定し、そのバッチが分離レベルをSERIALIZABLEに設定するストアドプロシージャを呼び出した場合、ストアドプロシージャがバッチに制御を返すと、分離レベルの設定はREPEATABLE READに戻ります。