sp_reset_connectionの無効化

SQLプロファイラを使用すると、接続プールから接続をフェッチするたびに、ストアドプロシージャsp_reset_connectionが実行されることがわかります。

このリセットを取り除くには(実際にはsp_reset_connectionは必要ありません)。接続文字列のConnection Resetパラメータをfalseに設定しようとしましたが、これは何の効果もないようです。私は、おそらく私は接続のリセットパラメータの目的を誤解していると思っています。

私は、Connectionのリセットパラメータが http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx を参照してください。しかし、それは http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879 を参照してください。

Conection Resetフラグを無効な値(「hello」など)に設定すると、Connection Resetフラグが実際に使用されていることを示す接続を開くときに例外が発生します。

ADO.NETは実際にConnectionリセットフラグを気にしますか?

下の私のコード:

  static void Main(string[] args)
  {
     const string connectionString =
        "Data Source=(local);Initial Catalog=MyDatabse;User ID=sa;Password=;Connection Timeout=5;Pooling=true;Min Pool Size=1; Max Pool Size=1; Enlist=false; Connection Reset=false;";

     var connections = new List();
     for (int i = 0; i < 1000000; i++)
     {
        using (var conn = new SqlConnection(connectionString))
        {
           conn.Open();

           SqlCommand command = new SqlCommand("SELECT * FROM DatabaseVersion", conn);
           command.ExecuteNonQuery();

           connections.Add(conn);
        }
     }
  }
4
他のみんなと同じように残してみませんか?これはあなたの問題ではありません。その代わりにそのに助けを求めてください。参考までに、かなり多くあります。 stackoverflow.com/questions/641120/…
追加された 著者 gbn,
私はgbnに同意します。何故sp_reset_connectionは必要ないと思いますか?
追加された 著者 Jared Moore,

1 答え

SqlClientは Connection Reset フラグを検証します(ブール値に変換可能である必要があります)。しかし、.NET 3.5 SP1以降、この値は無視されます

さらに、 SqlConnectionStringBuilder.ConnectionResetプロパティ .NET 3.5 SP1では廃止されました。

その理由は、 Connection Reset = false を設定することは大きなセキュリティ上の問題であるということです。オープンされた対称キー、一時キー、または偽装コンテキストなどの機密要素が関連付けられたセッションを再利用できます。さらに、 ChangeDatabase を別のデータベースに実行していた可能性があります。そのため、再度開いたときに「間違った」データベースに接続されます。

Connection Reset = false を設定する唯一の利点は、往復を避けるためにSQL Server 7.0のパフォーマンスが向上することです。

Connection Reset is documented in the .NET 3.0 docs. I assume that the reason it was removed from the 3.5 SP1 docs and later is because it now does nothing.

5
追加された