Azure で、SQL Server インストール済みの仮想マシンをデプロイする場合、「ストレージの構成」でストレージサイズや IOPS に応じたデータディスクの接続や、ワークロードに合わせたストレージの最適化が実施された状態で構築を行うことができます。
ストレージの構成には、SQL Server IaaS 拡張機能が使用されているのですが、この構成時に覚えておきたいポイントがありますのでまとめておきたいと思います。
Contents
■記憶域スペースの列数
ストレージサイズ / スループット / IOPS に応じたデータディスクを接続した状態でデプロイをすることができますが、複数のディスクを束ねる機能に関しては OS の記憶域スペースの機能が利用されています。
# HDD を選択した場合は、ストレージサイズのみ、SSD を選択した場合は、ディスク性能をスライダーで選択することで必要な本数のデータディスクが接続された状態となります。
記憶域スペースの設定は、SQL Server IaaS 拡張機能によって構築が行われています。
# Microsoft.SqlServer.Management.ServerConfigurationMgmt の Microsoft.SqlServer.Management.ServerConfigurationsManagement.Common の StorageHelpers で設定されています。
実際には、PowerShell のコマンドレットを順次実行することで、記憶域スペースと仮想ディスクを作成しているのですが、仮想ディスクを作成する際のディスクストライピングのディスク数 (列数) は「AutoNumberOfColumns」を使用して作成されています。
ディスクが 8 本までの場合はこれで問題ないのですが、ディスクを 9 本以上接続する場合は、気を付けておく必要があります。
こちらの画像はディスクを 16 本接続するストレージの構成でデプロイした SQL Server の仮想マシンの列数の情報となります。
「NumberOfColumns」が「8」に設定されていることが確認できますね。
「AutoNumberOfColumns」を設定した場合の仮想ディスクですが、GUI で作成した場合と同じで、列数の上限は 8 で設定されています。
今回は Standard Storage を使用している環境で、16 本のディスクで仮想ディスクが作成された状態となっています。
DiskSpd で書き込みをした場合のディスクアクセスの状況が以下になります。
4,000 IOPS で頭打ちになっていますね。
今回の環境は DS4v2 を使用しています。
キャッシュが無効な場合は、25,600 IOPS / 384MB まで I/O を発生させることができます。
書き込みキャッシュが無効なディスクが 16 本あるので、ディスクとしては、
- 60MB × 16 = 960MB/sec
- 500 × 16 = 8,000 IOPS
発生させることができるはずですが、3,400 IOPS 程度で上限が来てしまっていることが確認できます。
これは、ディスクの列数が 8 で設定されており、500 × 8 = 4,000 IOPS で設定されていることによる影響です。
一度、仮想ディスクを削除して以下のようなコマンドで再作成することで、列数を変更して IOPS を調整することができます。
New-VirtualDisk -StoragePoolFriendlyName SQLVMStoragePool1 -NumberOfColumns 16 -FriendlyName SQLVMDi sk1 -Interleave 256KB -ResiliencySettingName simple -ProvisioningType Fixed -UseMaximumSize
再作成後に、再度 DiskSpd で計測した結果が、こちらになります。
16 本分の I/O が発生できていますね。
今回は書き込みで試していましたが、Standard Storage の読み込みに関しては、現状すべてのデータディスクのホストキャッシュが「読み取り専用」に設定ができるようで、気づいたら 4 本までという制約が外れているようです。
# Premium Storage については、全ディスクの読み取りキャッシュを有効にできていましたが、Standard Storage には制約があったと記憶しています。
全ディスクで読み取りのキャッシュが有効になっている状態ですので、読み取りのワークロードに関しては列数の影響が見えてこない可能性がありますが、書き込み面では影響が出てきますので、設定されている列数については意識をしておいた方がよいかと。
■ストレージの最適化の設定
ストレージの最適化では、以下の 3 種類を選択できるようになっています。
- 全般
- トランザクション処理
- データ ウェアハウス
この 3 種類の設定ですが、記憶域スペースの Interleave の設定と SQL Server のトレースフラグの設定を制御するものになります。
Interleave | トレースフラグ | |
全般 | 256KB (262144) |
なし |
トランザクション処理 | 64KB (65536) |
-T1117 -T1118 |
データウェアハウス | 256KB (262144) |
-T1117 -T610 |
Interleave の設定に関しては、仮想ディスク作成時のパラメーターとなりますので、仮想ディスクを再作成する場合は「Interleave」オプションに適切な数値を再設定する必要があります。
トレースフラグについてですが、SQL Server を再インストールする際に影響があります。
SQL Server を再インストールすると、トレースフラグの設定がクリアされますので、「ストレージの最適化」の設定を変更していた場合は、設定していたワークロードに応じたトレースフラグを再設定します。
フォーマットに関しては、どの設定をしても、フォーマット時のアロケーションユニットサイズが 4KB で設定されています。
これについては、必要に応じて 64KB でのフォーマットを考慮しておいた方がよいかと。