SqlConnectionを使用しているアプリケーションに関するいくつかの統計、具体的には、サーバーに物理的にログインするために費やした時間について取得したいと思います。
単純なアプローチは次のようになります。
using (SqlConnection connection = ...)
{
Stopwatch loginTimer = Stopwatch.StartNew();
connection.Open()
loginTimer.Stop();
}
ひねりは、私も接続プールを使用していて、それをオフにしたくないということです。その結果、ほとんどの呼び出し.Open()
が実際にはプールから既存の開いている物理接続を取得しているだけなので、メトリックが歪んでいます。そのため、次のように表示されます。
00:00:01.39
00:00:00.02
00:00:00.02
00:00:00.02
...
アプリケーションは十分な接続を使用し、SqlAzureを対象としているため、物理ログインが十分な頻度で発生することを期待しています。
試す前に接続をテストしてみました:
if (sqlConnection.State != ConnectionState.Open)
{
// Time and call .Open()
}
残念ながら、論理SqlConnectionは物理接続の状態を反映していないため、if
ブロックは常に実行されます。
独自の接続プールを作成して、そこから引き出して実行することは可能ですが、閉じることはできません。したがって、論理接続の状態を介して物理接続の実際の状態を追跡できますが、本当にこれをしないことを好みます。