質問

    

この質問にはすでに回答があります:

    
            
  •              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:プールされた接続での分離レベルのリーク

追加情報を次に示します。

  

sp_reset_connectionとは

     

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に戻ります。

http://msdn.microsoft.com/en-us/library/ms173763.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top