
VMWare ESXi で実行されている Windows 2008 R2 仮想サーバーのバックエンドで SQL Server 2008 R2 Express を実行するアプリがあります。ユーザーから、アプリが非常に遅いという苦情が寄せられています。ディスク IO が非常に高くなっていますが、私には理解できません。
背景:
- ディスクキューの平均長さは約60、最大は約250
- 平均ディスク読み取り回数/秒は約2000回、最大は約3500回
- リソース モニターは、sqlservr.exe が .mdf ファイルを約 40 ~ 60 MB/秒で読み取っていることを示しています (下記参照)。書き込み IO は非常に低いです。
- .mdfファイルはわずか2GBなので、全体がメモリに収まるはずです。
- サーバーには32 GBのRAMがあり、通常は16 GB未満が使用されています。
- サーバーには、RAID10 で 8 台の 15k SAS ディスクが搭載されています。これは、PERC H710 コントローラーを搭載した Dell で、SSD を搭載して CacheCade (SSD ベースの読み取りキャッシュ) を有効にすることができます。試してみたいのですが、とにかく全体を RAM にキャッシュする必要があるようなので、これが役立つかどうかはわかりません。
- SQL VM は、VMWare ESXi 5 を実行している Dell サーバー上にあります。その ESXi ホストにはもう 1 つの VM がありますが、これは IO がほとんどないドメイン コントローラーです。
- このアプリは、以前はスタンドアロンの Windows 2003 サーバーで実行されていました。Windows 2008 R2 にアップグレードし、同時にアプリも新しいバージョンにアップグレードしたため、これらのいずれかの要因が影響している可能性があります。
これをさらに深く掘り下げるオプションは何ですか? SQL サーバーが内部で何を実行しているか (実行されているクエリなど) を確認する方法はありますか? この動作は正常で、ストレージの負荷が大きすぎるだけでしょうか? 何かが正しく構成されていないのではないかと考えています。
答え1
http://msdn.microsoft.com/en-us/library/cc645993(v=sql.105).aspx#スケーラビリティ
Espress は、SQL プロセスに 1 GB を超える RAM を使用しません。4 GB を超える RAM を使用するには、少なくとも Web または Standard を購入してインストールする必要があります。どちらも 64 をサポートしており、これは使用可能な RAM を超えているため、どちらかを選択してください。
また、DBA は非常に奥深いトピックですが、Technet とヘルプ ファイルから簡単にアクセスできます。「実行されているクエリを確認する方法」は、ほぼ Day-1 トピックです (特定のタスクに適したエディションを確認することも同様です)。Profiler は Express では利用できないため、現在の構成では困った状況になります。
答え2
クエリの詳細を確認します - 物理 IO または論理 IO が高いクエリをチェックし、それらを分離し、クエリ プランを確認します。2008 R2 などの古いバージョンを使用してから何年も経ちます... http://gallery.technet.microsoft.com/scriptcenter/Find-inefficient-query-88f4611f始めるきっかけになるかもしれません。
私の指摘は、テーブル スキャンをトリガーするインデックスの欠落です。プロファイラーとチューニング ウィザードも、問題がどこにあるかを把握するのに役立つ場合があります。2008 R2 のマネージャーにアクティビティの概要が既にある場合は、最もコストのかかるクエリを表示する便利なウィンドウがあります。