2011-12-15 9 views
1

私のWebアプリケーションでは、「レスポンステスト」プロセスを作りたいと思います。このプロセスは、Webページから起動して、データベースサーバに到達可能かどうか、結果を得るためのおおよその時間を確認することができます。私は、ストアドプロシージャの実行の正確な時間を必要としない"レスポンステスト"ストアドプロシージャを作成するにはどうすればよいですか?

、私はデータベースの「反応性」のアイデアを持っているしたいと思います..

だから私はこのような方法で行います

 var start = DateTime.Now; 
     var test = new ObjectManager().ListObjects(SomeParameters);    
     var stop = DateTime.Now; 
     TimeSpan diff = stop - start; 
     label.Text = diff.TotalSeconds.ToString(); 

実際、ObjectManager.listObject()はストアドプロシージャを介してデータベースからデータを取得するメソッドです。 したがって、すべてのプロセスの時間が計算されます。 データベースに接続し、ストアドプロシージャを起動し、データをキャストして取得します。 ストアドプロシージャだけでなく、これは問題ではありません。

これは問題なく動作しますが、2つの問題があります。

  1. 私は 件のデータの量からストアドプロシージャ「独立」を作成する必要があります。

  2. 最初の実行時に返される時間が の場合は1,62123秒です。そして私がページをリフレッシュすると、時間は 0,89897秒になります。半分の時間!各リフレッシュは約0.8 秒であることを後に...

それはそれは、SQLキャッシュによって引き起こされているようです。..

だから、私は中のデータのの量から「独立した」ストアドプロシージャを必要としますデータベースとは、SQLキャッシュを使用しない..それを行うための任意のアイデア?

答えて

1

静的な値を返すSQLコードを含むプロシージャを作成できます。 SELECT 1と同様です。またはSELECT getdate()

このようにして、データにアクセスすることなくデータベースへの接続をチェックします。

プロシージャを初めて実行するときに、SQLサーバーは計画を立てる必要があり、オーバーヘッドが発生します。

もちろん、コードから行を複数回実行して平均を計算することはもちろん可能です。

関連する問題