今日、私は会社のサーバーで長時間実行される(ただし高度に最適化された)クエリを実行しようとしていました。自宅のコンピューター(5400rpmハードディスク)の同じデータに対して同じクエリを実行しましたが、約40分かかりました。サーバーは約10倍遅く、おそらくまだ実行中です!サーバーは約30回/秒、自宅のコンピューターは300回/秒です。
CPU負荷が非常に低い(3%)ため、メモリが十分にあり、クエリがローカルで実行されるためネットワークが使用されません。ディスクI/Oがボトルネックであると思われます。代わりに私の自宅のコンピューター(より良いCPUパワーを得た)では、2つのコアがほぼ完全にロードされました。
関連するディスク構成は次のとおりです。
Windows 2003
SEAGATE ST3500631NS(7200 rpm、500 GB)
LSIMegaRAIDベースのRAID5
4つのディスク、1つのホットスペア
ライトスルー
確かに、RAID5は最速ではないかもしれませんが、ディスクは自宅のように高速になることで補います。
さらに興味深いデータ:
平均キューの長さ(書き込み):26
読み取りバイト/秒:1.3MB /秒
書き込みバイト/秒:1.2MB /秒
秒/読み取り:0.007
秒/書き込み:.5
1秒あたりの書き込み数:36
この書き込みのボトルネックを解決するにはどうすればよいですか?小さな書き込みが多いからですか?誤動作しているドライバーや、より大きな書き込みのためにいくつかのトランザクションを累積する可能性はありますか?
書き込みあたりの秒数は非常に大きいです!
ありがとう!
RAID5が主な原因だと思います。配列へのすべてのブロック書き込みは、読み取りの後に2回の書き込みが続く可能性があります-せいぜい(追加のブロックがすでにキャッシュに読み込まれている場合)、2回の書き込みになります。さらに、トランザクションログとデータファイルが同じ配列にある場合、データベースが実行する各書き込みは2回の書き込み(ログへの書き込みとデータファイルへの書き込み)になりますが、これはホームシステムの場合です。また、それ自体で比較に大きな影響を与えることはないので、それ以外の場合のパフォーマンスの違いが悪化します。
ホームドライブのキャッシュがオンになっている可能性があります。これにより、書き込みをわずかに並べ替えて、頭の動きを減らしてパフォーマンスを向上させることができます。先読みをオンにするとmay書き込み操作でのヘッドの競合を減らすことができますが、これはクエリが課す正確なI/Oパターンによって異なります。
書き込みパフォーマンスの理由から、データベースには通常5ではなくRAID10をお勧めします。
「同じデータ」と言うとき、一方のシステムがもう一方のシステムからバックアップおよび復元されたデータベースを実行していますか? 2つのデータベースの履歴に違いがある場合は、遅い方のデータベースのインデックス統計を更新する必要がある可能性があります(予期しないクエリ速度の問題は、bas statsが原因で、クエリプランナーがそれよりも最適でないパスを選択した結果である可能性がありますそうでなければ)。
また、両方の環境に同じ数のCPU /コアがありますか?少し前に、SQL Server 2000が2つのCPUを使用する場合、1つだけを使用するように指示された場合よりもディスクボトルネッククエリの実行に時間がかかるのを見ました。負荷を2つのCPUに分割しようとしたためだと思いますが、これにより増加しました。ディスク上の異なる場所から2つのスレッドが一緒に読み取ることによるI/O競合(これは最近見たことがないので、修正されてから長い間、そのエディション+ SPのバグであった可能性がありますが、一見の価値があるかもしれませんに-低コア環境で役立つ明示的なインデックスヒントを提供している場合は、クエリプランナーが追加のコアにより適した選択を行うことができる場合に備えて、それらを削除するか、ヒントを手動で再最適化してみてください)。
ライトスルーキャッシュは、パフォーマンスに影響を与える可能性があります。キャッシュへのすべての書き込みは、すぐにディスクに書き込む必要があります。ライトバックキャッシュは、データをディスクに書き込むための最適な時間を待つことができます。ハードウェアによっては、これには(アレイコントローラー上の)バッテリーバックアップが必要な場合があり、一部のコントローラーは、バッテリーがないか交換が必要な場合に書き込みキャッシュを無効にします。アレイキャッシュが実際に有効になっているかどうかを確認することをお勧めします。一部のコントローラーは、これをあまり明白にしません。
BIデータマートで深刻なIOの問題が発生しました。HPのサポートによると、誰かがRAID 5で構成されたHDDの1つを再インストールし、パリティを再構築していることがわかりました。何が再構築を開始したのかまだわかりません。
大変なトラブルでしたが、リビルドが終わるとパフォーマンスが戻ってきました。これは最も洞察に満ちた答えではないかもしれませんが、あなたがしなければならない考慮事項の1つです。