展開されたバージョンの製品で、パフォーマンスがあまり良くないという奇妙な問題が発生しています。いずれかのマシンでDBのバックアップを復元すると、期待どおりに実行されます。
注目すべき明らかなことがたくさんありますが、今のところ1つの領域に焦点を当てています。CPUサイクルの数は、マシンのプロファイルトレースで、私たちのマシンよりも5〜7倍高くなっています。同じデータベース。
SQL perfmonのCPU列はVMでどのように計算されますか?仮想CPUが実際のCPUを待機している間、サイクルはクロックされますか?仮想CPUの下で実際のCPUを切り替えると、キャッシュが失われ、CPU数が増える可能性がありますか?ここで時間を無駄にしていますか?
詳細:-両方のサーバーがSANストレージを備えたESXホスト上にあります。-インフラストラクチャが過負荷になっている可能性があると思います。-VMには4つのCPU、16(またはそれ以上)があります)VM-SANホストが実行している負荷が最大よりはるかに少ない場合のGBram最小実負荷-ESXホストは過負荷ではないと言われています(彼らのインフラストラクチャはまもなく拡張されますが)-私はこれをもっと明日掘り下げます。
他にもたくさんの変数が関係していることは知っていますが、私の好奇心は、同じDB上の同じクエリのCPU数の大きな違いについて私を殺しています-それが問題ではなくなったとしても、もっと知りたいですこれらの違いの原因について!
VMでCPUとメモリをオーバーコミットすると、間違いなく誤検知が発生する可能性があります。実際のパフォーマンスのボトルネックはOSから「隠されている」ため、Windowsの場合ほど簡単には見えない可能性があります。通常のWindowsボックス。これは以前にも何度も見たことがあります。そのため、割り当てられたリソースと、可能な場合はSQLServer専用のLUNを予約することを常にお勧めします。
また、クライアントが「古い」(Nehalem以前など)プロセッサを使用している場合、実際の仮想化はハードウェアの欠点によって影響を受ける可能性があります。古いハードウェアを搭載したホストにSQLServer VM(特に高IOではない)を配置することはお勧めしません。NehalemファミリーはVT-d(メモリが機能する場合)を導入しました。 VT-xがVM IDタグをTLBにアタッチする方法と同様に、ハードウェアがどのVMプロセッサ呼び出しが属する)を意味するかをハードウェアが認識できるようにします)ダイレクトI/O用に最適化されています。これらはすべて、プロセッサ、メモリ、およびI/O呼び出しをエミュレートするときにハイパーバイザーがこれらを追跡する必要がないようにするのに役立ちます。
また、VMレベルでパフォーマンスに影響を与える可能性のある他のものはDRSとVMotionですが、ハードウェアが新しいほど、特にVT-d、VTを使用している場合は問題が少なくなります。 -cおよびVT-n対応のプロセッサとチップセット。
あなたからのフィードバックを待って、私はこの答えを拡張しますので、コメントを提供してください...