web-dev-qa-db-ja.com

SQL Server 2008R2でのクエリのCPU /メモリ使用率の制限

アプリケーションサーバーからのAD-HOCプロセスがあり、データをMongoDBに移行するために、SQLserverで頻繁に使用されるOLTPデータベースの1つからデータをフェッチしています。

パフォーマンス測定中に、このSQLサーバーからデータをフェッチしている間に実行された部分で、CPUにほぼ1時間のスパイクがあり、ほぼ60〜80%に急上昇しています。

したがって、この影響を軽減するために、リソースガバナーを使用してCPU /メモリリソースを制限することを検討しています。私はRGを使用したことがありませんが、ブログを読むことは理想的であると思われます。

これが達成できるかどうか、または経験ごとのより良い提案を提案してください。

上記のアクティビティは毎月1回、5で約8000万のデータをフェッチしていますTB SQL Server 2008R2のデータベース

4
BeginnerDBA

短い答えは「はい」です。 RGを使用して、そのプロセスのCPU消費を制限できます。 RGはSQL Server 2008R2のEnterpriseおよびData Centerエディションでのみ使用できることに注意してください。 Microsoftドキュメントの優れたウォークスルーを使用して、RGの使用について学習します。 Resource Governor How-to Topics

より長い答え-RGは根本的な原因に対処していません。症状を助け、他のユーザーの病気への影響を少なくするためのバンドエイドです。私があなたの立場にいた場合、RGソリューションに頼る前に、プロセス自体を最適化するために時間を費やすことになります。 「8000万行にアクセスする」ことはそれほど意味がありませんが、データ行にアクセスするだけでCPUを大量に消費することはありません。私の経験では、時間のかかる多くのプロセスが数分(場合によっては数秒)に短縮され、元のプロセスよりもはるかに少ないリソースを消費するようにできることが何度も証明されています。最適化の取り組みには、適切なインデックス作成、スキーマの微調整、クエリ構文、計画調査などの専門性だけでなく、プロセスアーキテクチャとフローのより高いレベルの評価も含める必要があります。フルリフレッシュまたは増分更新を実行しますか?同じテーブルに何回アクセスしますか?多くの一時テーブルが関係していますか?歩数が多すぎますか?おそらくいくつかの冗長な作業が行われていますか?プロセスについてさらに詳細な情報を提供し、なぜそれがCPUを多く使用するのかを提供すると、ここの人々は喜んであなたを助けます。

もちろん、成功する保証はなく、最終的にはRGを使用するようになるかもしれませんが、私見の努力は非常に価値があります。

6
SQLRaptor

操作の時間帯にリソースを制限することを検討しているので、このクエリがアクティブなトランザクションに与える影響について懸念していることを理解しています(これはOLTPデータベースであるため)。

したがって、次のことが可能です。

  1. スナップショットを使用し、クエリにこれを(別のデータベースとして)使用させます。これにより、クエリウィンドウ中に競合の問題を解決できます。

  2. クエリを「時間外」に移動します。このクエリは時間に敏感ではないようです。例として、早朝に発生する可能性があります。

  3. スケジュールを変更して、このクエリが毎月ではなく毎週実行されるようにします。そうすれば、プロセス中の「厳しい」影響が少なくなります。
  4. その月の間にデータを別のテーブル/データベース/サーバーに構築します。クエリは代わりにそれらのテーブルにヒットできます。
  5. バージョンが十分に新しい場合は、最速のストレージサブシステムでメモリ内テーブルまたは一時テーブルを利用します。

ダラス