そのうち現象が解消されるかもしれませんが、2013/8/22 時点の情報として。
Azure の仮想マシン (Virtual Machine : VM) では、Virtual Machine and Cloud Service Sizes for Windows Azure に記載されているようにインスタンスのサイズに応じてデータディスクを追加することができます。
複数のディスクで I/O 効率を向上させるための手段としてストライピングがありますが、Windows Server 2012 以降であれば、従来からのディスクの管理からストライプボリュームを作成するのと、[ファイル サービスおよび iSCSI サービス] を追加して、記憶域プール (Storage Pool) を使用して物理ディスクをを複数で束ねてボリュームを切り出す方法があります。
先日の投稿で紹介した Performance Guidance for SQL Server in Windows Azure Virtual Machines でもディスクの I/O 効率を向上させるためのストライピングの方法として記憶域プールが紹介されており、どれくらいの I/O が出るのか試してみようと思って XL の上限である 16 本のディスクを追加してみました。
ディスクの追加には以下のようなコマンドを使用しています。
Select-AzureSubscription "[サブスクリプション名]" Set-AzureSubscription "[サブスクリプション名]" -CurrentStorageAccount [ストレージアカウント ] Get-AzureVM "[クラウドサービス名]" -Name "[仮想マシン名]" | Add-AzureDataDisk -CreateNew -DiskSizeInGB 50 -DiskLabel "jazuglt-sql-vhd01" -LUN 0 | Update-AzureVM
ディスクの追加が終わったので、記憶域プールを設定しようと思いサーバーマネージャーを開いたところ物理ディスクが 1 個しか認識していないという状態に。
なんでだろうと思って twitter や facebook でボソッとつぶやいたところ、@ksasakims さんから以下の情報を教えていただきました。
# @tenki28 さんからオンプレミスの環境だと接続する VHD をコピーするとこのような状態になることがあるということも教えていただきました。
Physical Disks showing up in Disks in Storage but not in Primordial pool on the storage pools tab
現状は、このような状態になってしまう場合は PowerShell で記憶域プールを作成しないといけないようですね。
ということで以下のようなコマンドを実行してストレージプールを作成しました。
$PhysicalDisks = Get-PhysicalDisk | Where-Object CanPool -eq $True New-StoragePool -FriendlyName DataPool_01 -StorageSubSystemFriendlyName "Storage Spaces on jazuglt-sql" -PhysicalDisks $PhysicalDisks
実行をすると記憶域プールに追加可能なディスクをすべて使用してプールが作成されます。
# 個別に追加する場合は Add-PhysicalDisk ですかね。
今回は 50GB のディスクを 16 本追加していますので 800GB 近くのプールが作成されています。
ここから仮想ディスクを切り出すのは GUI からできますので後の操作は通常の方法で実施することができます。
Performance Guidance for SQL Server in Windows Azure Virtual Machines を見ていたらこのドキュメントも PowerShell で記憶域プールを作成していました…。
SQL Server の場合、データファイルであればストライピングをせずに複数のディスクで認識させてしまい、データファイルを分割させることで I/O を稼ぐことができるのですが、ログファイルに関しては複数のファイルを作成して分散させても各ファイルを順にシーケンシャルに使用していくため、I/O を効率よく処理させるためにはストライピングをする必要が出てきます。
記憶域プールの使用方法はきちんと理解しておいたほうがよさそうですね。