2009-03-13 6 views
21

私は、SQL Server 2005/2008でSQLCacheDependencyを使用することを考えているプロジェクトに取り組んでおり、これがどのようにシステムのパフォーマンスに影響するのか疑問に思っています。SQLキャッシュ依存関係のパフォーマンスに関する質問

だから我々は、次の質問

疑問を抱いているSQLCacheDependencyオブジェクト(クエリ通知)の数は、すなわち、インサート上のSQL Serverのパフォーマンスにマイナスの影響を与える更新し、影響を受ける表の操作を削除することはできますか?

たとえば、SQL Server 2005/2008では、1つのテーブルで50000の異なるクエリ通知がそのテーブルの挿入と削除に影響します。

SQLCacheDependenciesの使用方法に関する推奨事項はありますか?公式の行為と行為はありませんか?私たちはインターネット上でいくつかの情報を見つけましたが、パフォーマンスの影響に関する情報は見つかりませんでした。

ここには、これらの質問に対するいくつかの回答があります。

+0

あなたは答えを見つけましたか?私はまた、これに対する答えを知りたいです。 – niaher

+0

私はこの質問がどれほど古くなったのを残念に思っていますが、プロジェクトのコンセンサスは別のルートをたどっていたので、決して明確な結果は得られませんでした。しかし、私が下の答えで読んだことは、これらの問題に関する重要な情報が含まれています。私は結果が出ていないのに、実際にはすべての答えが正しいと思いますので、この腸の感覚をバックアップする。 –

答えて

1

This pageは、どのようなテクニックを使用するかについての良い情報を持っているようです(私はそれをスキミングしました)。

+2

はいこれはキャッシュの依存関係を設定するための手順ですが、問題はありません。問題は、chache要求が多数の場合のSQL操作のパフォーマンス上のペナルティに関するものです。この記事では残念ながらそのことに関する情報はまったくありません。 :-( –

4

SQLCacheDependencyはインデックス付きビューとして実装され、テーブルが変更されるたびにこのビューのインデックスが変更されます。同じテーブル上の多くのビュー(SQLCacheDependencyオブジェクト)は、修正のためのかなりのヒットを意味します。ただし、テーブルごとに1つのビュー(SQLCacheDependencyオブジェクト)がある場合は問題はありません。

キャッシュ変更通知は非同期であり、サーバーにリソースがあるときにトリガーされます。

+0

プロジェクトは、あなたが提出したこの「ベストプラクティス」を壊したかもしれないテーブルへの複数の同時接続に関するものだったので、あなたがあなたの評価で正しいと信じる傾向があります。 –

1

私が提供できるのは、パフォーマンスに関する逸話的な証拠ですが、SqlCacheDependencyは、時間当たり1万メッセージのオーダーで処理する大規模なエンタープライズアプリケーションのための一種の「メッセージングソリューション」として使用されます。

基本的なアーキテクチャでは、Perforceをソース管理に使用しており、トリガーWebサービス呼び出しからp4コミットごとに呼び出されるメッセージを受け取り、SQLデータベースにレコードを挿入する「サブスクリプションサービス」があります。私たちのアプリケーションには、監視しているブランチやパスに影響を与えるすべての変更についてサブスクリプション通知を送信するための依存関係設定があります。

パフォーマンスは問題ありません。トリガーは200msのオーダーで実行され、エンド・ユーザーにメッセージを中継する遅延については一度も苦情がありませんでした。

いつものように、あなたの走行距離は異なる場合があります。

2

あなたはSQLキャッシュ依存関係に関連付けられたデータベース操作がシンプルであるため、重いが発生しません」この上の権利、あまり情報が提供されているが、あなたの質問に関連フレーズは、このページにありますhttp://msdn.microsoft.com/en-us/library/ms178604%28VS.80%29.aspx

サーバー上の処理コスト。

あなたの質問はもう少し古いですが、これは役に立ちます。

6

ポーリングメカニズムを使用したSQLキャッシュの依存関係は、SQL Serverまたはアプリケーションサーバーの負荷であってはなりません。

  1. データベースがsqlcachedependencyのために有効になっている:

    はsqlcachedependencyが動作し、それらを分析するためのすべてのステップがあるかを見ることができます。

  2. sqlcachedependencyに対して 'Employee'が有効になっているとの表があります。 (任意の数の表を指定できます)
  3. Web.configが更新され、sqlcachedependencyが有効になります。
  4. SQLキャッシュ依存関係を使用しているページが構成されています。 thats it。内部

  • ステップ1. sqlcachedependencyが有効になっている「従業員」のテーブル名を格納するデータベース内のテーブル「ASPnet_sqlcachetablesforchangenotification」を作成します。いくつかのストアドプロシージャを追加します。
  • ステップ2. 'ASPnet_sqlcachetablesforchangenotification'テーブルに 'Employee'テーブルエントリを挿入します。また、この '従業員'テーブルに挿入更新削除トリガを作成します。
  • ステップ3. connectionstringとpolltimeを指定して、sqlcachedependencyのアプリケーションを有効にします。

'Employee'テーブルに変更があるたびに、「ASPnet_sqlcachetablesforchangenotification」テーブルを更新するtriggerが発生します。 アプリケーションは5000msごとにデータベースをポーリングし、 'ASPnet_sqlcachetablesforchangenotification'テーブルへの変更を確認します。変更があれば、それぞれのキャッシュはメモリから除去される。

キャッシュの大きな利点は、データの新鮮さと組み合わせて(atmostデータは5秒古い)ことができます。ポーリングはバックグラウンドプロセスによって注意を払われ、パフォーマンスの障害にならないようにすべきです。なぜなら、上のリストから見ると、CPUの負荷が最も少ないからです。