windowsディスクI/Oの性能評価方法詳細


通常、データベースサーバのメモリとCPU圧力は容易に観測されます。しかし、I/O圧力に対する直感的な判断方法はない。
ディスクには2つの重要なパラメータがあります。Seek time、Rotational latency。正常なI/Oのカウントは:①1000/(Seek time+Rotational latency)*0.75で、この範囲では正常です。85%のI/Oカウント以上であれば、I/Oボトル力はほぼ存在していると考えられます。
理論的には、ディスクの乱読数は125となり、順次読み出し数は225となる。データファイルではランダムに読み書きし、ログファイルは順次読み書きます。したがって、データファイルはRAID 5に保存することを推奨し、ログファイルはRAID 10またはRAID 1に保存される。
以下の仮定では、4つのハードディスクのRAID 5において観測されたPhysical Disk性能オブジェクトの一部の値:
  • Avg.Disk Que Length 12
  • Avg.Disk Sec/Read.035
  • Avg.Disk Sec/Write.045
  • Disk Reads/sec 320
  • Disk Writes/sec 100
  • Avg.Disk Que Length、12/4=3、各ディスクの平均キューは2を超えないことを推奨します。
  • Avg.Disk Sec/Readは普通11~15 msを超えないでください。
  • Avg.Disk Sec/Writeは、一般的に12 msより小さいと提案されている。
  • 上記の結果から、ディスク自体のI/O能力は私たちの要求を満足させるものであり、大量の要求があるためにキューを待つことになります。これはSQL文が大量の表スキャンを引き起こしたためかもしれません。最適化を行った後、もしまだ要求を達成できないなら、以下の数式はいくつかのハードディスクを使ってこのような同時要求を満たすことができると計算してくれます。
  • Raid 0--I/Os per disk=(reads+writes)/number of disk
  • Raid 1--I/Os per disk=[reads+(2*writes)]/2
  • Raid 5--I/Os per disk=[reads+(4*writes)/numberof disk
  • Raid 10--I/Os per disk=[reads+(2*writes)/numberof disk
  • 得られた結果は、(320+400)/4=180の場合、数式①によってディスクの正常なI/O値が得られます。現在正常I/Oは125と仮定し、この結果を達成するために:720/125=5.76。つまり、6つのディスクを使ってこそ、このような要求が達成できるということです。
    しかし、上記のDisk Reads/secとDisk Writes/secは正確に見積もるのが難しい値です。そのため、システムが忙しい時だけに、大体の平均値を見積もって計算式の根拠とします。もう一つはお客様からSeek time、Rotational latencyパラメータの値を得るのが難しいです。これも理論値125でしか計算できません。
    どのようにPerformance Logを通じてSQLのディスクの性能問題を確定しますか?
    1.Disk Bytes/secを確認します。例を挙げると、このcounterの最大値が11 Mであれば、work loadは高くないと説明します。
    2.Avg.Disk sec/Transferを確認します。例えば、このカウンタの推奨値は<0.015.
    3.Avg.Disk Que Lengthを見ると、この推奨値は<2.
    いくつかの重要なperformance counter:
    カウンター
    Description
    Logical Disk\
    フリースペース%
    ディスク空間に割り当てられていない空間が論理ボリューム内のすべての利用可能な空間に占める割合を報告します。
    _を選択するとTotal例の場合、カウンタは各ディスクの合計を再計算します。
    PhysicalDiscオブジェクトにはこのカウンタがありません。
    Logical Disk|PhiysicalDisk\
    Avg.Disk Bytes/Transfer
    入出力(I/O)動作のデータ量を測定します。ディスクが比較的速く大量のデータを伝送するとディスクは効率的です。
    最大スループットを測定するときは、このカウンタを観察すべきである。
    データ転送をさらに分析するには、Avg.Disk Bytes/ReadとAvg.Disk Bytes/Writeの二つのカウンタを確認しなければならない。
    Logical Disk|PhiysicalDisk\
    Avg.Disk sec/Transfer
    データが移動する速度を示しています。(秒で測定します。)データの転送毎の平均時間を測定します。読みや書きのデータの大きさに関係なく、データからDiskperf.sysを離れて、作業が完了するまでの読みや書きの合計時間を示しています。
    このカウンタの高い値は、キューが長いためにシステムが再試行要求をしたり、一般的ではないディスクエラーのために要求を再試行したりすることを意味するかもしれない。
    データ転送をさらに分析するには、Avg.Disk sec/ReadとAvg.Disk sec/Writeの二つのカウンタを確認しなければならない。
    Logical Disk|PhiysicalDisk\
    Avg.Disk Que Length
    カウンタデータのサンプリングポイント間にキューに入れられてディスクを待つ要求の数が記録されています。処理中の要求も含まれています。これは少し大げさなデータかもしれません。
    二つ以上の要求が一つのディスクのシステムで持続的に待っている場合、ディスクはボトルネックかもしれない。
    キュー長のデータをさらに分析するには、Avg.Disk Read Que LengthとAvg.Disc Write Que Lengthの二つのカウンタを確認しなければならない。
    Logical Disk|PhiysicalDisk\
    Current Disk Que Length
    現在待機中のディスク要求の数が表示されており、処理中の要求も含まれている。
    多くの要素の影響を受けて、仕事量の状態が比較的に安定していない限り、十分なサンプルを集めて、モデルを作ることができます。
    これは即時の数値または現在の列の長さであり、Avg.Disk Que Length、Avg.Disk Read Que Length、およびAvg.Disk Write Que Lengthとは違って、その3つの反応の平均値である。
    Logical Disk|PhiysicalDisk\
    Disk Bytes/sec
    バイトが伝送されるレートを示しており、このカウンタはディスクスループットの主要な測定指標である。
    読むか書くかの伝送のデータをさらに分析するには、Disk Read BytesまたはDisk Write Bytes/sec両カウンタをそれぞれ調べなければならない。
    Logical Disk|PhiysicalDisk\
    Disk Transfers/sec
    秒ごとに完了した読み書き操作数が表示されていますが、これらの読み書き操作がどれぐらいのデータにかかわっているかにかかわらず、ディスクの利用率を測定します。
    この値が50を超えると(strippedのボリュームなら、物理ディスクごとに平均して見られます)、これはボトルネックかもしれません。
    さらに読みまたは書きのデータ転送を分析するには、それぞれDisk Read/secとDisk Writes/secを確認しなければならない。
    Logical Disk\
    Free Megabytes
    ディスクに割り当てられていないバイトの量を報告します。
    PhysicalDiscオブジェクトには、このカウンタがありません。
    Logical Disk|PhiysicalDisk\
    Split IO/sec
    報告オペレーティングシステムは、I/O要求を複数のディスク要求の比率に分けます。一つのプログラムが要求するデータサイズが大きすぎると、一つの要求に入れられない、またはディスクに破片があると、一つのsplit I/O要求が発生する可能性があります。
    IO要求サイズに影響を与える要因は、アプリケーション設計、ファイルシステム、ドライバプログラム、高比率のsplit I/O自体が問題として出現しない可能性があります。
    Logical Disk|PhiysicalDisk\
    %Disk Time
    選択したディスクドライブがサービス読み書き要求の時間比で忙しいことを報告します。このカウンタのデータは複数のサンプルを超えてディスクの利用率を誇張し続けます。この値は%Idle Timeと比較して、より明確な認識を得ることができます。
    このカウンタの値はデフォルトでは100%を超えません。
    Logical Disk|PhiysicalDisk\
    %Disk Write Time
    選択されたディスクの書き込み要求の処理に忙しい時間の割合を報告します。
    Logical Disk|PhiysicalDisk\
    %Disk Read Time
    選択されたディスクを報告するのは、要求を読むのに忙しい時間の割合です。
    Logical Disk|PhiysicalDisk\
    %Idle Time
    ディスクシステムは要求を処理していないと報告しています。また、キューの中で作業している時間の割合は何もありません。このカウンタと%Disk Timeを合わせた場合、結果は100%ではないかもしれません。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。