SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

MicroServer を SQL Server のデータストレージとして使ってみる

leave a comment

HP ProLiant MicroServer を SQL Server のデータストレージとして使ってみるとどうなのかなと思って試してみました。

以前投稿した SQLIOSIM を使用したストレステストの実施 を見て思い出しながら検証しています。

■MicroServer と SQL Server の接続方法


MicroServer には Windows Server 2012 + iSCSI Target をインストールしています。
ML110 G6 + Windows Server 2012 + SQL Server 2012 の SQLIOSIM を使用して MicroServer を SQL Server のストレージとして使用した場合にどうなるかの計測を実施しています。

iSCSI の設定としては以下の情報を参考に多少チューニングをしています。
How to improve Microsoft iSCSI initiator performance
Configure iSCSI Network Cards as per Microsoft Best Practices PowerShell
Microsoft® iSCSI Target 3.3 availability and performance white paper (2010)
Windows Server 2008 または Windows Server 2008 R2 環境で、遅延 ACK を有効にするようにネットワーク環境を設定し、ストレージが iSCSI を使用して接続されている場合、一般的な操作を実行すると iScsiPrt エラーがシステム イベント ログに出力される

といっても initiator 側 と target 側の以下のレジストリを変更しているぐらいですが。

  • HKLMSYSTEMCurrentControlSetControlClass{4D36E97B-E325-11CE-BFC1-08002BE10318}<Instance Number>Parameters
    iSCSIDisableNagle : 0x1 (DWORD)
  • HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfaces<Interface GUID>
    TcpAckFrequency : 0x1 (DWORD)

MicroServer の iSCSI のストレージとして使用しているディスクのパフォーマンスは以下のようになっています。
記憶域プールからストライプした仮想ディスクを切り出すよりダイナミックディスクのストライプのボリュームを使用したほうが CrystalDiskMark のスループットはよかったのですよね。
image

MicroServer のディスク接続は SATA2 になりますので、転送速度は 300MB/sec 程度になると思います。
今回はディスクに Intel SSD 320 120GB を使用しており、カタログスペックは こちら になります。

Capacity

Sequential Read/Write

Random 4KB Read/Write

Form Factor
120GB 270 MB/s / 130 MB/s 38K IOPS / 14K IOPS

2.5 inch SATA, 7.0 and 9.5 mm

SSD 1 本だとパフォーマンスがそれほど出そうにないので、同じ SSD を 3 本搭載して、OS のソフト RAID でストライピングをしています。
image

ネットワークは Giga Hub に接続をしているのですが、シングルパスだと帯域が不足してしまうので MPIO で Giga の NIC 2 本で MPIO の構成としています。
下の画像は iSCSI で接続しているディスクに対して I/O をかけている際のタスクマネージャーで両方の NIC が使用されていることを確認した状態になります。
image

CrystalDiskMark で iSCSI Target に接続をしているディスに対してベンチマークをとった結果がこちらです。
image

ローカルディスクに対して CrystalDiskMark を実行した結果がこちらです。
# 3 本のディスクで記憶域プールを作成して、ストライプした仮想ディスクを使っています。
image

 

■SQLIOSIM でパフォーマンスを計測してみる


ローカルディスクと iSCSI で接続しているディスクに対して SQLIOSIM を実行してパフォーマンスを計測してみたいと思います。

以下のグラフは NIC の I/O になるのですが、各 NIC から 120MB 程度の I/O となっているようですね。
各 NIC から 960Mbps ですので、Giga の帯域をほぼ使い切れている状態ですね。

image

ディスク I/O のグラフがこちらになります。
iSCSI 経由での接続となっていますので両方の NIC の I/O を足したもの (240MB 前後) と同じトレンドとなっています。

image

Read と Write を別でグラフ化したものがこちらになります。
Read / Write ともにそれなりの数値が出ていますね。
image

次にローカルディスクで SQLIOSIM を実行したものを取得してみます。
iSCSI のディスクより、高い値を示しているタイミングがありますね。
image

こちらも Read と Write の状態を見てみたいと思います。
最初の Write / 最後の Read 以外は iSCSI のディスクと比較して低い値となっていますね。
image

SQLIOSIM では最初に Performing initial Update Scan, Checkpointing initial Update Scan / 最後に Performing final Audit Scan #1 が実行されており、これらの処理に関してはローカルディスクのほうが高いパフォーマンスを示しています。

データベースファイルの初期化と DBCC アクティビティに関してはローカルディスクのほうがパフォーマンスが良いようですね。CrystalDiskMark では Sequential Read / Write の上限はローカルディスクで測定した場合、300MB 前後でしたので測定した上限値が SQLIOSIM でも出ているようです。

その他の処理 (Random Query / Read Ahead / Bulk Update) に関しては iSCSI で接続しているディスクのほうがパフォーマンスが良いようですね。

SQLIOSIM の実行結果がこちらになります。

データファイル

iSCSI ローカルディスク
Target IO Duration (ms)  100 100
Running Average IO Duration (ms)  55 1,138
Number of times IO throttled  30,252 23,145
IO request blocks  579 99
Reads  18,302 9,127
Scatter Reads  44,496 30,480
Writes  1,132 1,016
Gather Writes  94,973 62,278
Total IO Time (ms)  403,489,605 429,836,426

 

ログファイル

Target IO Duration (ms)  100 100
Running Average IO Duration (ms)  1,357 39
Number of times IO throttled  35 110
IO request blocks  1 7
Reads  0 0
Scatter Reads  0 0
Writes  18,143 3,291
Gather Writes  0 0
Total IO Time (ms)  630,911 279,448

 

ユーザー数を調整して負荷をかけた結果がこちらになります。

iSCSI

image
image

 

ローカルディスク

image

データファイル

iSCSI ローカルディスク
Target IO Duration (ms)  100 100
Running Average IO Duration (ms)  52 46
Number of times IO throttled  18,867 22,148
IO request blocks  1,475 3,513
Reads  6,691 6,772
Scatter Reads  32,451 30,286
Writes  782 1,387
Gather Writes  70,175 63,127
Total IO Time (ms)  686,027,641 461,113,556

 

ログファイル

iSCSI ローカルディスク
Target IO Duration (ms)  100 100
Running Average IO Duration (ms)  41 43
Number of times IO throttled  34 82
IO request blocks  8 8
Reads  0 0
Scatter Reads  0 0
Writes  5,862 5,538
Gather Writes  0 0
Total IO Time (ms)  1,020,710 339,656

 

こちらのグラフにはディスクのキューも追加してみたのですが、ユーザー数を増やすと、ディスクキューのトレンドが変わってくるようですね。
# Network に関してはキューはたまっていませんでした。
iSCSI で I/O が停止しているタイミングがあり、その影響で SQL Server の I/O 数にも影響が出てきています。
少量の OLTP 処理であれば MicroServer でパフォーマンスを出せそうですが、同時接続数が上がると少し厳しい感じがしますね。

Written by masayuki.ozawa

1月 7th, 2013 at 1:24 am

Posted in SQL Server

Tagged with ,

Leave a Reply

*