長い紹介で申し訳ありませんが、質問をする前に、背景を説明することで問題をよりよく理解できると思います。
WebサービスにSQLServer2008をバックエンドとして使用しており、テーブルをクエリするselectリクエストに20秒以上かかるなど、非常に高速に実行されるはずのリクエストに応答するのに時間がかかりすぎることがあります。 22行しかない。インデックスからストアドプロシージャ、トリガーなどの問題を引き起こす可能性のある多くの潜在的な領域を調べ、読み取りは行わないが頻繁に書き込むインデックスを削除するか、選択したクエリにNOLOCKを追加して、ロックのロックを減らすなど、できる限り最適化しようとしました。テーブル(ダーティリードでも問題ありません)。
また、DBAにサーバーのレビューを依頼し、コンポーネントのベンチマークを行って、CPU、メモリ、またはディスクサブシステムのボトルネックを確認し、ハードウェアに関しても問題がないことを確認しました。また、スパイクがときどき発生するため、同じクエリを再実行すると、ほとんどの場合、期待する応答時間が得られ、予想される応答時間ではなく、短い応答時間が得られるため、本番環境または開発でエラーを再現することは非常に困難です。以前に経験した。
そうは言っても、ボトルネックではないように見えますが、私はI/Oについてほとんど疑っています。しかし、サーバー上の特定のテーブルのインデックスフラグメンテーションレポートを実行した後、エラーを再現できたと思います。これにより、そのテーブルに対して実行されるリクエストだけでなく、他のテーブルをクエリする他のリクエストでもすぐにスパイクが発生しました。また、DBとサーバーは、使用する他のアプリケーションと共有されており、サーバーとデータベースでクエリを実行することもありますが、これは私たちにとって一般的なシナリオであり、I/Oのボトルネックが発生する可能性があります。事実になると私は信じています。
したがって、他のリソースに依存するクエリが実行されている場合でも処理されるWebサービスからの要求に優先順位を付ける方法を見つけたいと思います。解決プロセスの最初から、上記で説明したある種の優先順位付けを探していましたが、SQL Server 2008には、要求の優先順位付けを可能にする「リソースガバナー」と呼ばれる機能があることがわかりました。
ただし、私はResource GovernorやDBAの専門家ではないため、Resource Governorを使用した、または使用している可能性のある他の人の経験と、特定のログインまたは特定のログインのI/Oを優先できるかどうかを尋ねたいと思います。ストアドプロシージャ(たとえば、Webサービス要求の受信時に1つのI / O集中型プロセスが実行されている場合、SQLサーバーはそのプロセスのI / Oアクティビティを停止または減速し、要求に優先順位を付けることができますか?受け取ったばかりですか?)
事前に読んだり手伝ったりすることに時間を費やしてくださった方、ありがとうございました。
ハードウェアの詳細:
CPU:2xクアッドコアAMD Opteron 8354
メモリ:64GB
ディスクサブシステム:Compaq EVA8100シリーズ(わかりませんが、8 HPHSV210SCSIドライブ全体でRAID0+ 1である必要があります)
PS:そして、アプリケーションサーバーがエラーを引き起こしておらず、そこで特定できるボトルネックがないことをほぼ100%確信できます。
アップデート1:
gbnが以下に尋ねた以下の質問については、できる限り回答するように努めます。他に何か探している場合はお知らせください。
1)どのようなインデックスと統計のメンテナンスをお願いしますか?
毎週金曜日にインデックスをデフラグするジョブを毎週実行しています。それに加えて、統計の自動作成と統計の自動更新が有効になっています。また、断片化ジョブ以外の時間にもスパイクが発生しています。
2)どのような書き込みデータボリュームがありますか?
答えるのは難しいです。私たちのWebサービスに加えて、同じデータベースにアクセスするフロントエンドアプリケーションがあり、定期的にリソースを大量に消費するクエリを実行する必要がありますが、取得方法がわかりません。たとえば、毎週または毎日、DBに金額を書き込みます。
3)再コンパイルと統計の更新イベントのプロファイルを作成しましたか?
これがわからなくてごめんなさい。この質問であなたが何を求めているのか理解できませんでした。可能であれば、この質問についてさらに情報を提供できますか?