2012-02-24 13 views
5

SQL Server 2008R2データベース& .Net 3.5アプリケーションの速度を向上させる最も一般的で簡単なソリューションは何ですか?キャッシュを使用してSQLサーバーのパフォーマンスを向上させることは可能でしょうか?

次の属性を持つアプリケーションがあります。
- 少数の同時クライアント(MOSTで約200)。
- SQLサーバー側の複雑な数学演算
- 私たちは、Oracleのrow-level security -The主な問題は、ユーザーが大量のを実行することである(このようTVF年代とstoredprocsの代わりに、直接照会テーブルを使用して)に何かを模倣しているアップデート/ /を削除し、挿入/それらのアクションが実行されている間にページがリロードされるのを待つ必要があるため、それらはフリークアウトします。

次のように私は上の明確化が必要なご質問は、次のとおりです。

  1. を高速で何:ので、戻らない(SQL Serverからデータセット全体を返すとC#側で数学関数を実行する、またはSQL側で計算機能を実行します余分な列)。それとも、ハードウェアのみに依存していますか?
  2. キャッシングによってパフォーマンスが向上します(たとえば、redisキャッシュを追加した場合など)。または、多数のクライアントにのみソリューションをキャッシュすることは可能ですか?
  3. 一部のデータをあらかじめ計算してデータベースのどこかに保存するのは悪い習慣です(ユーザーが要求すると、計算されます)。それとも、これはキャッシングが何をすると思いますか?これが悪い習慣でない場合は、使用可能なリソースがある場合に計算を実行するようにSQL Serverを構成するにはどうすればよいですか。
  4. データベースに移動してレコードが更新されているかどうかを確認するには、キャッシュを使用するとパフォーマンスが向上する可能性がありますか?

一般的な提案やコメントも歓迎します。

答えて

7

答えを2つの部分に分けて、パフォーマンスを向上させるためにクエリの実行とキャッシングのパフォーマンスを分けましょう。 私はあなたのSQLサーバーの負荷に対処し、それを実行しているプロセスを最大限に最適化しようとするべきだと考えています。これはキャッシングを実装する必要性の大部分を解決するはずです。

あなたの質問から、トランザクション処理と集計/計算の両方に使用されるシステムがあるように見えます。これらの2つのタスクが互いにリソースをロックすると、競合が発生することがよくあります。数学演算を実行する長いクエリは、UIに必要なオブジェクトをロック/保持することがあります。 これらのシステムを並行して機能させるよう最適化し、クエリの効率を向上させることは、パフォーマンスを向上させるための鍵です。

まず、質問を使用します。より速いのは何ですか?あなたが実行している実際の集計に依存します。集合演算(例えば、列のSUM/AVG)を扱う場合、SQLでそれを保持します。一方、プロシージャ内にカーソルがある場合は、 C#。カーソルがあなたのパフォーマンスを殺すでしょう! データを集約して後でそのリポジトリに問い合わせるのが悪いことを尋ねました。これがベストプラクティスです。結局のところ、トランザクションの多いクライアントと集約された情報を格納する別のデータベースを1つのデータベースにまとめることで、他のニーズに素早く簡単に利用できるようになります。次のステップに進むには、データウェアハウスを持つことになります。そのため、多くの情報と計算があるときに、どこに向かうのかは間違いありません。

最後に、キャッシングは難しいですが、あなたのニーズの具体的な性質に依存しています。上記のアプローチを取って、プロセスを改善する時間を費やし、最終的な結果によってキャッシュが冗長になると思います。

タスクの最も良い友達の1人は、SQLプロファイラです.stmt:completedのトレースを実行して、最高の継続時間/ io/cpuを確認し、最初に選択します。

幸運を祈る!

+1

SQLプロファイラについてはっきりと同意する –

関連する問題