SQL Server 2008 のためのディスク パーティション アライメント ベスト プラクティス

SQL Server 2008

logo-sql08.gif

SQL Server 技術資料

著者 : Jimmy May 、 Denny Lee

寄稿者 : Mike Ruthruff 、 Robert Smith 、 Bruce Worthington 、 Jeff Goldner 、 Mark Licata 、 Deborah Jones 、 Michael Thomassy 、 Michael Epprecht 、 Frank McBath 、 Joseph Sack 、 Matt Landers 、 Jason McKittrick 、 Linchi Shea 、 Juergen Thomas 、 Emily Wilson 、 John Otto 、 Brent Dowling

テクニカル レビューアー : Mike Ruthruff 、 Robert Smith 、 Bruce Worthington 、 Emily Wilson 、 Lindsey Allen 、 Stuart Ozer 、 Thomas Kejser 、 Kun Cheng 、 Nicholas Dritsas 、 Paul Mestemaker 、 Alexei Khalyako 、 Mike Anderson 、 Bong Kang

発行 :2009 年 5 月

対象 : SQL Server 2008

要約 : ディスク パーティションのアラインメントは、 SQL Server のパフォーマンスを向上するのに役立つ強力なツールです。ディスクのパフォーマンスを最適に構成することは、しばしば、科学的でもあり芸術的でもある作業と考えられています。ディスク パーティションのアラインメントは、重要ながらも見落とされがちなベスト プラクティスの 1 つです。 Windows Server 2008 では特に設定しなくても新しいパーティションを作成するときにアラインメントが試みられますが、以前のバージョンの Windows 上に作成されたパーティションにとっては、ディスク パーティションのアラインメントはまだまだ切り離せないテクノロジです。

このホワイト ペーパーでは、ストレージがアラインメントされているかどうかによるパフォーマンスの違いと、パーティションがアラインメントされていない場合に I/O パフォーマンスに悪影響を与える理由について説明します。また、分析、診断、修復など、 Windows Server 2003 上で構成されたストレージのディスク パーティションのアラインメントや、 Windows Server 2008 が新しいパーティションのアラインメントに関連する問題を修復しながら、既存のパーティションの構成を変更しないしくみについても説明します。

また、背景情報、実装、ベンダーの考慮事項、 2 つの重要な相関関係、有効なパーティション開始オフセット、パーティションをアラインメントしてファイル アロケーション ユニットのサイズを定義し、ドライブ文字を割り当てるための簡単な手順といったトピックも取り上げます。パーティションのアラインメントが SQL Server 2008 に与える影響を示すテスト結果も併せて紹介します。

この資料の Microsoft Word バージョンをダウンロード できます。

はじめに

ディスクのパフォーマンスを最適に構成することは、しばしば、科学的でもあり芸術的でもある作業と考えられています。しかし、ディスク パフォーマンスのベスト プラクティスを理解すれば、パフォーマンスを大きく向上できます。ディスク I/O のパフォーマンスには、ディスクの数、サイズ、速度、ファイル アロケーション ユニットのサイズ、ホスト バス アダプター (HBA) とファブリック スイッチの構成、ネットワーク帯域幅、ディスク上、コントローラー上、記憶域ネットワーク (SAN) 上のキャッシュ、専用、共有、仮想化のいずれのディスク状態か、 RAID のレベル、バス速度、ディスク I/O サブシステムからサーバーへのパス数、すべての構成要素のドライバーのバージョン、 RAID ストライプ サイズ、ワークロードなど、数多くの要因が影響します。

ディスク パーティションのアラインメントは、重要ながらも見落とされがちなベスト プラクティスの 1 つです。

Windows Server® 2008 オペレーティング システムでは特に設定しなくても新しいパーティションを作成するときにアラインメントが試みられますが、以前のバージョンの Windows® オペレーティング システム上に作成されたパーティションにとっては、ディスク パーティションのアラインメントはまだまだ切り離せないテクノロジです。

サポート案件に共通する根本的原因の 1 つとして、 Microsoft® SQL Server® データベース ソフトウェアのストレージ構成がベスト プラクティスに準拠していないことが挙げられます。多くの場合、 Windows 、ストレージ、ディスク コントローラー、およびキャッシュ セグメントの境界がアラインメントされていないことが原因です。

パーティションがアラインメントされていないと、パフォーマンスに大きな悪影響が出ることがあります。パーティションが Windows Server 2008 より前のバージョンの Windows の RAID ディスク デバイスに作成されていて、高いパフォーマンスが求められる場合は、ディスク パーティションをアラインメントすることが要件です。この後説明しますが、 Windows Server 2008 で作成される新しいパーティションは、開始オフセットが基になる RAID ストライプ ユニットに ( 高い確率で ) 揃えられます。

システムに高いパフォーマンスが求められる場合は、代表的なワークロードを使ってテストして、その環境でディスク パーティションをアラインメントすることが有効かどうかを判断することが不可欠です。

Windows Server 2003 またはそれ以前のバージョンの Windows の場合、パーティションの作成時に実行しない限り、既定のアラインメントオフセットではパーティションはアラインメントされません。これらのバージョンの Windows の既定では、以前の世代のディスク コントローラーが使用していたシリンダー / ヘッド / セクター (CHS) というアドレス指定方式に基づく境界に揃えて、ディスク パーティションが作成されます。以前のバージョンの Windows で作成された既存のパーティションが Windows Server 2008 にアタッチされた場合、そのパーティションの作成時にアラインメントの問題があっても、そのまま維持されます。

このホワイト ペーパーでは、ストレージがアラインメントされているかどうかによるパフォーマンスの違いと、パーティションがアラインメントされていない場合に I/O パフォーマンスに悪影響を与える理由について説明します。また、分析、診断、修復など、 Windows Server 2003 上で構成されたストレージのディスク パーティションのアラインメントや、 Windows Server 2008 が新しいパーティションのアラインメントに関連する問題を修復しながら、既存のパーティションの構成を変更しないしくみについても説明します。

また、次のトピックについても説明します。

  • 背景情報
  • 実装
  • ベンダーに関する考慮事項
  • 2 の重要な相関関係
  • 有効なパーティション開始オフセット

さらに、パーティションをアラインメントして、ファイル アロケーション ユニット サイズを定義し、ドライブ文字を割り当てるための簡単な手順についても紹介します。

適用範囲

ここで説明する情報は、マスター ブート レコード (MBR) パーティションのある Windows のベーシック ディスクとダイナミック ディスクに適用されます。

GUID パーティション テーブル (GPT) ディスクの詳細については扱っていません。ただし、ディスク パーティションのアラインメントはベスト プラクティスの 1 つなので、最適なパフォーマンスが得られるように次の各ハード ドライブを構成する場合には必要になります。

  • MBR
  • MBR
  • GPT
  • GPT

ダイナミック ディスクと GPT ディスクのパフォーマンス特性については、 SQL Server Customer Advisory Team Web サイト (www.sqlcat.com 、英語 ) の今後の発行物で扱う予定です。

背景情報

同じような場面で、 " パーティションのアラインメント " 、 " ディスクのアラインメント " 、 " ボリュームのアラインメント " 、および " セクタのアラインメント " といった用語を耳にした方もいるでしょう。ここでは、 " パーティションのアラインメント " を使用します。

" パーティションのアラインメント " はあまり耳にしない用語かもしれません。経験豊富なディスク管理者であっても、あまり馴染みがないかもしれません。最初は説明に疑いの目を向けられることもしばしばあります。

このトピックに詳しいエンジニアでも、重要性を過小評価していることがあります。たとえば、パーティションのアラインメントが有効なのは Microsoft Exchange Server に対してだけと考えている方もいます。実は、高いパフォーマンスが要求されるすべてのサーバー、特に SQL Server では、パーティションのアラインメントが重要です。

まず、主な用語とその歴史について説明します。

用語

ディスク I/O の説明に使用されている用語の中には、あいまいで明確に区別されていない用語がたくさんあります。一般的に知られている定義を反映している用語もあれば、そうではない用語もあります。共通の基盤に立ってコミュニケーションすることが重要です。ハード ドライブには多くの構成要素がありますが、今回の説明で重要な構成要素は「付録」の図 2 に示しています。同じ付録の図 3 と図 4 は、図を使った説明です。

" ハード ドライブ " の内部には " プラッター " という薄い円盤が 1 枚以上搭載され、その表面に情報を格納する電子媒体があります。

各プラッターの各面にはたくさんのトラックがあります。プラッターのすべての面上で、同じ直径を持つ同心円上にあるトラックのセットが、 " シリンダー " を構成します ( 最近のドライブではシリンダーの概念がなくなり、トラックは同心円状に配置されなくなりましたが、語源を知っていると理解しやすくなります ) 。プラッターの各面に、専用の読み取り / 書き込みヘッドがあります。トラックは、セクターに分割されます。セクターは、ハード ドライブに対する読み取りや書き込みが可能なデータの最小単位です。これまで、セクターのサイズは 512 バイトに固定されていましたが、新しいドライブには、 1 KB 、 2 KB 、または 4 KB のセクターを使用できるものもあります。

多くのエンジニアは、ファイル アロケーション ユニットを " クラスター " とも表現します。クラスターのサイズは、オペレーティング システム ( またはユーザー ) によってパーティションがフォーマットされるときに決定されます。たとえば、ハード ドライブのセクターが 512 バイトであれば、 4 KB のクラスターには 8 つのセクターが、 64 KB のクラスターには 128 個のセクターがあります。

" ストライプ サイズ " は、 RAID-0 、 RAID-10 、 RAID-5 、または RAID-6 のディスク グループで、すべてのディスクにまたがって存在する 1 つのストライプ全体のサイズです。ストライプ ユニット サイズは、ディスク グループの各メンバーに格納されるときの、ストライプの各要素のサイズです。ストライプ サイズは、ストライプ ユニット サイズと RAID グループに含まれるディスク数の積です。ストライプ ユニット サイズは、管理者が構成可能な RAID ディスク グループの属性です。ストライプ ユニットは、各ディスク上でストライプ ユニット サイズとまったく同じサイズのビットの集まりです。

説明

最適なアラインメントを行うために必要な簡単な手順に従う際は、パーティションのアラインメントに関する微妙な差異を気にする必要はありません。パーティションのアラインメントを実行する方法の詳細については、この後の「実装」で説明します。

パーティションがアラインメントされていない場合の特徴を簡単に説明します。ディスク アレイ ハードウェアは 63 個の予約済み ( 隠し ) セクターがあることを報告し、 Windows はそのままこの情報を取り込み、ディスクの先頭パーティションの先頭にこれらのセクターを確保します。マスター ブート レコード (MBR) はこのような隠しセクターに存在します。ディスク ハードウェアから報告された 63 個の隠しセクターに Windows が準拠していると、ストライプ ユニット、ディスク コントローラー、およびキャッシュ セグメントの境界が揃わなくなります。 Windows XP 、 Windows Server 2003 、およびそれ以前のすべてのバージョンの Windows では、これらの予約済みセクターが根本的な物理境界に揃いません。その結果、 1 クラスターのユーザー データが、 RAID の複数のストライプ ユニットにまたがって書き込まれることになります。この操作の影響が n 回おきに現れます。この場合の n はファイル アロケーション ユニット ( クラスター ) のサイズとストライプ ユニットのサイズによって異なります。ディスク コントローラーなどのハードウェアの根本的な物理境界にも揃いません。

ストライプ構成のアレイ全体で、要求が 1 つ以上のストライプ ユニットの境界をまたがる場合、アレイ コントローラーに送られる 1 回の I/O が複数回の I/O に分けて実行されます。こうした影響が積み重なると、パフォーマンスが大きく低下する可能性があります。試験環境と運用環境での影響の詳細については、この後の「パフォーマンスへの影響」で説明します。

どのような場合にも当てはまる原則があります。つまり、アラインメントされていないと、データのクラスターが物理境界をまたがって書き込まれることになり、意図しない不要な I/O が行われ、パフォーマンスの低下につながります。

ベンダーから明確に推奨事項が示されていない場合は、「重要な相関関係 : パーティション オフセット、ファイル アロケーション ユニット サイズ、およびストライプ ユニット サイズ」で説明している相関関係に準拠するパーティション オフセットを使用します。一般に、有効なパーティション開始オフセットは 64 KB です。これは、この値がディスク、コントローラー、およびキャッシュの根本的な物理境界と明らかな相関関係があるためです。他にも有効なパーティション開始オフセットはあります。 Windows Server 2008 の既定のオフセット値は 1,024 KB です。詳細については、この後の「有効なパーティション開始オフセット」で説明します。

Windows オペレーティング システムにおけるパーティションのアラインメント

パーティションのアラインメント動作は、使用している Windows のバージョン、およびパーティションを作成した Windows のバージョンによって異なります。ここからは、 Windows Server 2008 、 Windows Vista® オペレーティング システムと、 Windows Server 2003 以前の Windows におけるパーティションのアラインメント動作について説明します。

Windows Server 2008 と Windows Vista: 新しいパーティション

通常、 Windows Vista と Windows Server 2008 では既定でパーティションがアラインメントされます。 4 GB を超えるディスクアラインメントの既定値は 1 MB です。この設定は構成可能で、レジストリの次の場所にあります。

HKLM \ SYSTEM \ CurrentControlSet \ Services \ VDS \ Alignment

ただし、 OEM がセットアップした製品を入手した場合 ( 修復パーティションが付属しているなど ) 、 Windows Server 2008 が新規インストールされていても、パーティション開始オフセットが望ましくない位置に設定されている事例が確認されています。

オペレーティング システムのバージョンや種類にかかわらず、新しいパーティションがアラインメントされていることを確認してください。

Windows Server 2008: 以前に作成されたパーティション

Windows Server 2008 で新しいパーティションを作成すると、ほとんどの場合、パーティションはアラインメントされます。しかし、以前のバージョンの Windows で作成され、 Windows Server 2008 にアタッチされたパーティションは、作成時の属性が変更されません。つまり、パーティションを明示的にアラインメントしなければ、これらのパーティションはアラインメントされた状態になりません。

Windows Server 2003 およびそれ以前

Windows Server 2003 およびそれ以前のバージョンの Windows で作成されたパーティションは、既定ではアラインメントされません。パーティションを明示的にアラインメントする必要があります。

システム ドライブ

Windows Server 2008 より前のバージョンの Windows のシステム ドライブは、アラインメントできません。さいわい、 SQL Server 専用コンピューターでのシステム パーティションに関連するワークロードは、一般に、高いパフォーマンスが要求される SQL Server データベース ファイルなど、大量の I/O を占有するディスクほど、パーティションがアラインメントされていないことが重要にはなりません。「付録」で説明するように、最近のディスクは独自開発の " ブラック ボックス " になっていて、ディスク パーティションをアラインメントしても個々のディスクのパフォーマンスは向上しません。しかし、キャッシュの境界がアラインメントされていないことは、依然としてパフォーマンスに影響します。オペレーティング システムが存在するディスクや、 SQL Server のデータ ファイルとログ ファイルが存在するディスクなど、すべてのディスクでパフォーマンスのしきい値 ( 特にディスクの待ち時間 ) を超えていないことを確認してください。

Windows Server 2008 の新規インストールでは、システム ドライブが既定でアラインメントされます。

仮想ドライブ

仮想ドライブだけでなく、仮想ドライブが存在するホスト ドライブも、最適なパフォーマンスが得られるようにアラインメントする必要があります。ここで説明するガイドラインは、ゲストとホストの両オペレーティング システムに当てはまります。

説明

最適なアラインメントを行うために必要な簡単な手順に従う際は、パーティションのアラインメントに関する微妙な差異を気にする必要はありません。パーティションのアラインメントを実行する方法の詳細については、この後の「実装」で説明します。

パフォーマンスへの影響

以下の詳細テストでは、アラインメントすることでディスクの待ち時間とクエリの実行時間の両方が約 30% 削減されました。 6 個のアラインメント済みディスクのパフォーマンスは、 8 個の未アラインメントのディスクに匹敵するか、上回ります。

このテストは、デュアル コア 3.00 GHz Intel Xeon プロセッサー 2 基、 PERC 5/E コントローラー 1 基、および 8 GB の物理 RAM を搭載した DELL PowerEdge 2950 で行いました。 6 個または 8 個のディスク (SAS DAS の 73 GB 15K RPM) は、クラスター サイズが 64 KB でストライプ ユニット サイズが 64 KB の RAID 10 で構成しました。 Windows Server 2003 と SQL Server 2005 をインストールし、ユーザーがパフォーマンスのベンチマークに使用していたクエリを実行しました。各テストの前に DBCC DROPCLEANBUFFERS を実行して SQL Server バッファー キャッシュを消去し、ワークロードの実行に必要なすべてのデータをディスクから読み込むようにしています。

収集したデータは、ディスクの待ち時間、実行時間、およびその他の関連指標です。ディスクの待ち時間の計測には、 PhysicalDisk および LogicalDisk パフォーマンス オブジェクトの Avg. Disk Sec/Transfer カウンターを使用しました。ディスクの待ち時間は、ディスクのパフォーマンスの基本的な指標です。

テストは単純ですが説得力があります。結果には一貫性があり、有意義なものです。 図 1 に、この結果を示します。

Figure 1 Results of an experiment documenting the benefits of disk partition alignment

1. ディスク パーティションをアラインメントするメリットを示すテスト結果

この結果を分析すると、次のような結論が導き出されます。

  • ディスクをアラインメントすると、アラインメント前と比較してパフォーマンスが大幅に向上します。測定値から、ディスクの待ち時間と実行時間が 30% 以上向上したことがわかります。
  • 6 個のアラインメント済みディスクのパフォーマンスは、8 個の未アラインメントのディスクに匹敵するか、上回ります。

この図からは、パーティションをアラインメントすることで、スループット ( バイト / 秒 ) が増加し、ディスクのキューが短かくなったことはわかりません。 CPU の差は、問題にならない程度でした。

その他の例

他のユーザーで実施されたテストの内容とその結果を次の表にまとめました。これらの結果は包括的なものではありませんが、多種多様なワークロードとハードウェア構成でも、ディスク パーティションをアラインメントするとパフォーマンスが向上することを実証しています。この表に示す作業のため、ユーザーによって大量のデータが再構成されました。たとえば、ある大手金融企業では、 SharePoint® Services をホストしていた SQL Server のディスク インフラストラクチャを再構築しました。また、ある大手通信企業では、企業全体で数テラバイトものデータを再構築しました。

シナリオ

パフォーマンスの向上

テーブル スキャン、 UPDATE ステートメント、および SELECT ステートメントを含む、新規 OLTP 運用システムのワークロード。

図 1 に示すように、待ち時間と実行時間が 30% 向上しました。

企業向け Hitachi AMS SAN ストレージアレイ。

平均ワークロードが 8 ~ 12% 向上しました。

SAP データベース サーバー上の SQLIO (EMC Symmetrix SAN に 16 GB のメモリを搭載し、 Veritas で管理しているダイナミック ボリュームを使用する 8 コア サーバー ) 。

8 KB ランダム書き込み : 18% 向上

64 KB シーケンシャル書き込み : 26% 向上

256 KB シーケンシャル書き込み : 23% 向上

金融向けビジネス インテリジェンス (BI) データ ウェアハウスのワークロード (CX380 SAN に 16 GB のメモリを搭載した 4 コア サーバー ) 。

ランダム読み取りが 34% 向上しました。

金融向け BI データ ウェアハウスのワークロード (CX380 SAN に 16 GB のメモリを搭載した 4 コア サーバー ) 。

1 秒あたりの I/O が 30 ~ 40% 増加し、クエリ時間が 20% 向上しました。重要な向上点としては、ディスク パーティションをアラインメントしたことで、 BI ワークロードで処理できるユーザー数が 3 倍に、毎秒の要求数が 350% に増加しました。

大手通信企業 (BI および OLTP の両方の読み取りワークロードに対し、すべてのメモリを使用する A/A/P 環境で 32 GB のメモリを搭載した 4 基のデュアル コア プロセッサを使用してテストしました。このシナリオではディスクは RAID 5 に設定されました ) 。

I/O が 40% 向上しました。

4 時間かかっていたメンテナンス タスクが 90 分に短縮されました。

1.4 億行のテーブルへの 100 万行の挿入操作が 6 分 59 秒から 0 分 52 秒に短縮されました。

5 億行のテーブルへの挿入操作が 30% 向上しました。

1. テスト環境と運用環境でディスク パーティションをアラインメントした場合の効果

アラインメントされていない場合、 RAID 5 への書き込みで最大 90% のパフォーマンスの低下が測定されました。この値は変化が大きかったので、一般的に生じる結果とは言えません。

アラインメントされていなくても、 SQL Server では先行読み取りが行われるため、シーケンシャル I/O への影響はランダム I/O ほど深刻ではありません。

パーティション開始オフセット

ディスク パーティションをアラインメントすることでパフォーマンス上のメリットを得るには、有効なパーティション開始オフセットを構成する必要があります。

パーティション開始オフセットを調べるツールはいくつかあります。ただし、信頼できる結果が得られるのは、特定の状況だけです。ここでは、有効なパーティション開始オフセットと、こうしたオフセットを調べるために使用するツールについて説明します。

有効なパーティション開始オフセット

Windows Server 2003 以前のバージョンの Windows は、ディスク ハードウェアから報告される 63 個の隠しセクターに依存しており、最も一般的なセクター サイズは 512 バイトなので、既定の ( 最適ではない ) パーティション開始オフセットは 32,256 バイト ( ちょうど 31.5 KB) 目です。

そのため、開始オフセットを 31.5 KB からちょうど 32 KB に明示的に変更することが、理にかなったアプローチと考えられます。実際は、既に説明したように、後で説明する相関関係から、通常は 64 KB が SQL Server の最小の ( かつ一般的な ) 有効なパーティション開始オフセットになります。

有効なパーティション開始オフセットを選択する際は、まずストレージ ベンダーからのベスト プラクティスを調べ、 SQL Server 向けに構成されたストライプ ユニット サイズとファイル アロケーション ユニット サイズに関連する推奨事項を確認します。ベンダーから明確な情報が提供されていなければ、 Windows Server 2008 の既定値を選択します。

Windows Server 2008 でパーティションをアラインメントする際の既定値は、 1,024 KB (1,048,576 バイト ) です。この値を使用すると、長期にわたって使用できるソリューションになります。この値は、後で説明するように、ストライプ ユニット サイズと密接な相関関係があります。一般的なストライプ ユニット サイズは 64 KB 、 128 KB 、 256 KB などですが、まれに、 512 KB や 1,024 KB のものもあります。また、この値には、事実上、ストレージ ハードウェアが確保する隠し構造は含まれません。

ベーシック ディスク パーティションのオフセット : wmic.exe

Windows Management Instrumentation (WMI) を使用して、ディスク関連情報を Windows に問い合わせることができます。次のように Wmic.exe を使用すれば、 Windows ベーシック ディスクのパーティション開始オフセットを簡単に取得できます。

wmic partition get BlockSize, StartingOffset, Name, Index

Index の値は、 " ディスクの管理 " Microsoft 管理コンソール (MMC) スナップイン (Diskmgmt.msc) でのディスク番号と同じです。 wmic volume を使用して、ディスクのインデックスとドライブ文字を対応付けることもできます。

ダイナミック ディスク パーティションのオフセット : dmdiag.exe -v

コマンド ライン ユーティリティ Dmdiag.exe を使用して、 Windows の " ダイナミック ボリューム " のパーティション オフセットを特定できます。

重要 : 前述の wmic コマンドでも、ベーシック ディスクだけを対象に設計されたその他のツールでも、 Windows ダイナミック ディスクのパーティション開始オフセットを正確に調べることはできません。

このツールは、 Windows Server 2003 のサポート ツール フォルダーにあります。 Windows Server 2008 では、このツールは diskdiag.exe という名前に変更されました。

ダイナミック ディスクのパーティション開始オフセットを特定するには、次のコマンドを実行します。

出力はいくつかのセクションに分かれています。既存のボリュームのパーティション開始オフセットを分析するのに適したセクションは、 -v スイッチを使用した場合にのみ出力されます。分析に適したセクション ( および関連する列 ) は次のとおりです。

Dynamic Disk Information (Rel Sec)

LDM Volume Information (Rel Sectors)

これらのセクションと列に注目してください。他にもオフセットについて報告するセクションがありますが、誤解を招くおそれがあり、ダイナミック ボリュームのパーティション開始オフセットを解釈する情報としてはそれほど信頼性が高くありません。

マイクロソフトのツール (dmdiag) であっても、サード パーティのソフトウェアが作成したダイナミック ボリュームのパーティション開始オフセットを調べる場合は、信頼性が高いとは言えないことがあります。たとえば、 dmdiag では、 Veritas Enterprise Administrator 作成のダイナミック ボリュームのパーティション開始オフセットが正しく報告されません。このような場合は、正しい分析に必要なツールと技法についてベンダーに問い合わせてください。

コマンド ラインのパーティションアラインメントツール : diskpart.exe と diskpar.exe

ディスク パーティションのアラインメントは、 " ディスクの管理 " スナップイン (diskmgmt.msc) では実行できません。

Windows には、 diskpart.exe および diskpar.exe というディスク パーティションをアラインメントするためのツールが 2 つあります。

コマンド ライン ユーティリティ diskpar.exe は、 Windows 2000 リソース キットで導入されました。その後継ツールである diskpart.exe は、 Windows Server 2003 で導入されました。名前末尾の "t" の有無に注意してください。 /align オプションは、 Windows Server 2003 Service Pack 1 (SP1) から採用されました。どちらのユーティリティも強力なため、実行には注意が必要です。

diskpar.exe では、パーティションのアラインメントがバイト単位で正確に報告されます。しかし、結果が有効なのは MBR ベーシック ディスクの場合のみで、マイクロソフトはこのツールのサポートを終了しています。

diskpart.exe では、ベーシック ディスクのアラインメントが KB 単位で報告されます。既に述べたように、 Windows Server 2003 ( およびそれ以前 ) の既定のアラインメントは 32,256 バイト ( ちょうど 31.5 KB) です。残念ながら、 diskpart.exe ではこの値が 32 KB に切り上げられます。 diskpart.exe はパーティションをアラインメントするのに適したツールですが、パーティション オフセットについて報告される値の精度はそれほど細かくありません。そのため、ベーシック ディスク パーティションのオフセットを調べる際は wmic コマンドを使用し、 Windows ダイナミック ディスクの場合は dmdiag -v を使用してください。

実装

ここでは、特定の測定値とツールを使用して、前半に示した推奨事項を実装する方法について説明します。また、ベンダーに関して考慮する必要のある問題についても取り上げます。

重要な相関関係 : パーティション オフセット、ファイル アロケーション ユニット サイズ、およびストライプ ユニット サイズ

既存のパーティションと新しい実装の間で、ディスク パーティションのアラインメントに関する構成の整合性を確認するには、ここで説明する情報を使用してください。

最適なディスク I/O パフォーマンスを得るために満たしておくべき基本的前提条件として、 2 組の相関関係があります。つまり、次の計算結果が整数値にならなければなりません。

( パーティション オフセット ) ÷ ( ストライプ ユニット サイズ )

( ストライプ ユニット サイズ ) ÷ ( ファイル アロケーション ユニット サイズ )

2 つのうち特に最初の式は、最適なパフォーマンスを得るため、何よりも重要です。一般にアラインメントされていないとされるシナリオについて例を挙げて説明します。パーティション開始オフセットが 32,256 バイト (31.5 KB) 、ストライプ ユニット サイズが 65,536 バイト (64 KB) とすると、最初の式の計算結果は 0.4921875 になります。この値は整数ではないため、オフセットとストライプ ユニット サイズの間に相関関係がありません。これは、 " アラインメントされていない " と言えます。

しかし、パーティション開始オフセットが 1,048,576 バイト (1 MB) で、ストライプ ユニット サイズが 65,536 バイトであれば、結果がちょうど整数の 8 になるため、アラインメントされていると言えます。

ファイル アロケーション ユニット ( クラスター ) サイズと一般的なストライプ ユニット サイズには相関関係があることが多いため注意してください。パフォーマンスに関して言えば、多くの場合、数式ごとに相関関係があるかどうかではなく、クラスター サイズが NTFS の既定値 (4,096 バイト ) に設定されているか、明示的に 64 KB に定義されている (SQL Server のベスト プラクティス ) かが問題です。

ストライプ ユニット サイズ

Windows には、ストライプ ユニット サイズを調べる、信頼性の高い方法がありません。ストライプ ユニット サイズの値は、ベンダーのディスク管理用ソフトウェアまたは SAN 管理者から入手します。

ファイル アロケーション ユニット サイズ

ドライブごとに次のコマンドを実行すると、ファイル アロケーション ユニット サイズがクラスターあたりのバイト単位で報告されます。

fsutil fsinfo ntfsinfo c:
fsutil fsinfo ntfsinfo d:
など...

以下に示すように、 "Bytes Per Cluster" 値にファイル アロケーション ユニット サイズが含まれています。

D:\>fsutil fsinfo ntfsinfo b:
NTFS Volume Serial Number :       0xa2060a7f060a54a7
Version :                         3.1
Number Sectors :                  0x00000000043c3f5f
Total Clusters :                  0x000000000008787e
Free Clusters  :                  0x000000000008746e
Total Reserved :                  0x0000000000000000
Bytes Per Sector  :               512
Bytes Per Cluster :               65536
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length :           0x0000000000010000
Mft Start Lcn  :                  0x000000000000c000
Mft2 Start Lcn :                  0x0000000000043c3f
Mft Zone Start :                  0x000000000000c000
Mft Zone End   :                  0x000000000001cf20

SQL Server のデータ ファイルまたはログ ファイルが存在するパーティションの場合、ほとんどのインストールに適切な値は 65,536 バイト (64 KB) です。多くの場合、この値は Analysis Services のデータ ファイルやログ ファイルと同じサイズですが、 32 KB に設定するとパフォーマンスが向上する場合もあります。適切なサイズを判断するには、 2 種類のブロックの サイズを比較するワークロードを使って、パフォーマンス テストを実行する必要があります。

diskpart.exe を使用したパーティションのアラインメント、ドライブ文字の割り当て、およびアロケーション ユニット サイズの割り当て

この方法の長所は、パーティションをアラインメントするのが簡単なことです。短所は、パーティションの作成時、パーティションをフォーマットする前に、パーティションをアラインメントしておく必要があることです。この方法は、新しい SAN の場合は非常に便利ですが、アラインメントされていないパーティション上にある大量の既存データを変換する場合は手間がかかります。

注意 : どのようなツールを使用しても、パーティションをアラインメントし直すと既存のデータが削除されるため、元には戻せない破壊的な操作となります。

diskpart.exe を使用してパーティションをアラインメントし、ドライブ文字を割り当て、パーティションをフォーマットする場合のテンプレートを以下に示します。

Diskpart
list disk
select disk <DiskNumber>
create partition primary align=<Offset_in_KB>
assign letter=<DriveLetter>
format fs=ntfs unit=64K label="<label>" nowait

F: ドライブを Disk 3 上に作成し、 1,024 KB のオフセットに揃え、 64 KB のファイル アロケーション ユニット ( クラスター ) サイズでフォーマットする場合の例を以下に示します。

C:\>diskpart
Microsoft DiskPart version 6.0.6001
Copyright (C) 1999-2007 Microsoft Corporation.
On computer: ASPIRINGGEEK
DISKPART> list disk
  Disk ###  Status      Size     Free     Dyn  GPT
  --------  ----------  -------  -------  ---  ---
  Disk 0    Online       186 GB      0 B
  Disk 1    Online       100 GB      0 B
  Disk 2    Online       120 GB      0 B
  Disk 3    Online       150 GB   150 GB
DISKPART> select disk 3
Disk 3 is now the selected disk.
DISKPART> create partition primary align=1024
DiskPart succeeded in creating the specified partition.
DISKPART> assign letter=F
DiskPart successfully assigned the drive letter or mount point.
DISKPART> format fs=ntfs unit=64K label="MyFastDisk" nowait

nowait を指定すると、非同期フォーマットが開始されるため、複数のパーティションのフォーマットが次々に開始され、操作を並列に実行できます。 format オプションは Windows Server 2003 では使用できません。

diskpart.exe は、コマンド ラインから直接実行することも、スクリプトに記述することもできます。 /s スイッチで、入力スクリプト ファイルを指定します。

ベンダーに関する考慮事項

多くのベンダーは、 Windows Server 2003 におけるディスク パーティションのアラインメントをベスト プラクティスとして記載しています。

しかし、パーティションのアラインメントは最適化に必須ではないと主張するベンダーもあります。たとえば、あるベンダーは、パーティションのアラインメントは不要だと述べ、 "(SAN) のシーケンシャル アクセスのパフォーマンスが向上することも低下することもない " と付け加えています。興味深い主張ですが、裏付けとなるデータが存在しないか、まだ論争中の主張です。この主張ではシーケンシャル I/O については明確に述べていますが、 OLTP データベースと Analysis Services データベースで最適なパフォーマンスを得るためにが重要なランダム I/O については述べていません。

ストレージ ベンダーに、推奨事項を問い合わせてください。明確な情報がない場合は、 Windows Server 2008 の既定値 (1,024 KB) でディスク パーティション オフセットを実装することを検討してください。

システムに高いパフォーマンスが求められる場合は、代表的なワークロードを使ってテストして、その環境でディスク パーティションをアラインメントすることが有効かどうかを判断することが不可欠です。

まとめ

最適なディスク I/O パフォーマンスを得るには、多くの要因が影響します。 Windows Server 2003 で作成されたディスク パーティションの場合、ベスト プラクティスは、ストライプ ユニット サイズとファイル アロケーション ユニット サイズとの間に正しい相関関係を持たせるようにパーティションをアラインメントさせることです。これが、最適なパフォーマンスを得るための基盤となります。

Windows Server 2008 では、パーティションが既定でアラインメントされます。サーバーを Windows Server 2008 にアップグレードする場合、それ以前に作成されていたパーティションは自動的にはアラインメントされず、最適なパフォーマンスを得るには再構築しなければなりません。したがって、 Windows Server 2003 または Windows 2000 Server で作成された既存のパーティションがアラインメントされていない場合、これを適切に再構築するまでは、ディスク パーティションのアラインメントは、依然として、手放すことのできないテクノロジです。

ここで説明したベスト プラクティスを使用して、既存のディスクを調べ、ベーシック パーティションとダイナミック ボリュームを分析する際の違いに注意し、構築可能で適切な場所に再構築し、すべての新しいパーティションとして作成してください。

関連情報:

http://www.microsoft.com/japan/sqlserver/: SQL Server Web サイト

http://technet.microsoft.com/ja-jp/sqlserver/: SQL Server TechCenter

http://msdn.microsoft.com/ja-jp/sqlserver/ : SQL Server デベロッパー センター

http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&sd=rss&spid=3198: An updated version of the Disk Partition tool for Windows Server 2003 is available (マイクロソフトサポート技術情報の資料、英語)

http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx: Predeployment I/O Best Practices (Microsoft TechNet Best Practices Article シリーズ、英語)

http://www.microsoft.com/technet/prodtechnol/sql/2005/physdbstor.mspx: Physical Database Storage Design (Microsoft TechNet の資料、英語)

http://www.microsoft.com/whdc/archive/subsys_perf.mspx: Disk Subsystem Performance Analysis for Windows (マイクロソフトホワイトペーパー、英語)

http://blogs.msdn.com/jimmymay/archive/2009/05/08/disk-partition-alignment-sector-alignment-make-the-case-with-this-template.aspx: Disk Partition Alignment (Sector Alignment): Make the Case: Save Hundreds of Thousands of Dollars (ディスクパーティションのアラインメントセクターのアラインメント主張: 数十万ドルの節約、MSDN のブログ記事、英語)

http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx:Disk Partition Alignment (Sector Alignment) for SQL Server: Part 1: Slide Deck (SQL Server のディスクパーティションのアラインメント ( セクターのアラインメント ): 第 1 部: スライド、MSDN ブログ記事、英語)

http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx: Disk Partition Alignment (Sector Alignment) for SQL Server: Part 4: Essentials (SQL Server のディスクパーティションのアラインメント ( セクターのアラインメント): 第 4 部: 基礎知識、MSDN ブログ記事、英語)

http://sqlblog.com/blogs/joe_chang/archive/2008/03/04/storage-performance-for-sql-server.aspx:Storage Performance for SQL Server (SQL Server のストレージパフォーマンス、ブログ記事、英語)

http://blogs.msdn.com/mssqlisv/default.aspx: SQL ISV のブログ (Microsoft SQL ISV Program Management チーム、英語)

http://blogs.msdn.com/sqlcat: SQL Server CAT のブログ (Microsoft SQL Server Development Customer Advisory チーム、英語)

http://msdn.microsoft.com/ja-jp/sqlserver/bb671432.aspx : SQL Server ベスト プラクティス (MSDN サイト )

http://www.microsoft.com/japan/sqlserver/2005/alwayson/default.mspx: SQL Server: SQL Server Always On Technologies (SQL Server AlwaysOn パートナープログラム、Microsoft SQL Server サイト)

http://technet.microsoft.com/ja-jp/library/cc766465.aspx : DiskPart のコマンド ライン オプション (TechNet の資料 )

http://www.microsoft.com/downloads/details.aspx?familyid=BCB9100D-698F-40A3-BF53-692D793C6E4F&displaylang=en: Microsoft IT Showcase: Volume Expansion Using Diskpart.exe (Microsoft TechNet IT ショーケースの資料、英語)

このホワイト ペーパーはお役に立ちましたか ? フィードバックをお寄せください。 1 ( 役に立たなかった ) ~ 5 ( 非常に役に立った ) の 5 段階で評価してください。また、その評価の理由もお知らせください。以下に例を示します。

  • 評価が高いのは、例が適切、図がわかりやすい、説明が明快といった理由からですか。
  • 評価が低いのは、例が少ない、図がわかりにくい、説明があいまいといった理由からですか。

このようなフィードバックをお寄せいただくと、今後のホワイト ペーパーの品質向上につながります。

フィードバックは、こちら ( 英語 ) までお送りください

付録 : ディスク パーティションアラインメントの内部

既に述べたように、最適なアラインメントを行うために必要な簡単な手順に従う際は、パーティションのアラインメントに関する微妙な差異を気にする必要はありません。詳細については、「実装」を参照してください。

現在のハード ドライブは、説明できないほど複雑です。とはいえ、 HDD 内部の特性を簡略化して以下に示します。詳細については、「用語」を参照してください。

Figure 2

2. ハード ドライブ内部の概略図

最近のディスク構造は、業界の専門家が " ブラック ボックス " と呼ぶほど複雑です。現在は、どのような点から考えても、ディスクの物理セクターにアラインメントされることはありません。ディスクのセクターは、装置の外部から把握できるような方法では物理領域に対応付けられていません。デバイスからは、その配置上の " 位置 " が巧みに単純化されて報告されます。テクノロジがこうした限界を超えたのは 1984 年ごろです。ストレージ サブシステムから報告されるシリンダー / ヘッド / セクター (C/H/S) の表記は、ここ数年、正確ではなくなりました。トラックあたりの実際のセクター数はディスクごとに異なっており、オペレーティング システムに公開されません。セクターとトラックは、現在でも概念として有効な構造です。予測できなくなったのは、トラックのサイズと配置です。合計ディスク サイズを算出するために、プラッター数、トラック数、およびセクター数を公開していますが、合計サイズの算出以外には役立ちません。しかし、 Windows Server 2008 より前の Windows では、まだ C/H/S の表記を使用して、パーティションをアラインメントしようと無駄な労力を費やしていました。

このような制限事項と前提条件の結果、 NTFS.SYS ドライバーで定義されているストレージのブロック ( ファイル システムのクラスターなど ) が、ハードウェアでのストレージのブロック ( コントローラーのキャッシュ境界、ディスク アレイのストライプ ユニット サイズなど ) に合わせてアラインメントされないことがありました。最近のディスク I/O サブシステムでは、ディスク構造を、キャッシュ セグメントの境界と、 RAID アレイとアレイ コントローラーのストライプ ユニットに対応付けることを目標にしています。

以下の 2 つの図は、アラインメントされていない既定のディスク構成とアラインメント後の構成を示す、ディスク アーキテクチャのおおまかな模式図です。

どちらの図も、参照しやすいようにオブジェクトに番号を付けています。赤いグラデーションに重ねた黒い縦の点線は、 RAID グループに含まれる個別の物理ディスクの境界を示しています。グラデーション部分は、番号で区別していない複数の割り当てを含む領域を示します。既に説明したように、 Windows Server 2008 より前のバージョンの Windows には、ディスク ハードウェアから報告される 63 個の予約済みセクターが表示され、このセクターに続く残りのパーティションがユーザーに公開されます。以下の図では、一般的なセクター サイズとして 512 バイトを使用しています。どちらの例もストライプ ユニット サイズは 64 KB です。どちらの図も、 1 行目がストライプ ユニットに、 2 行目がディスク セクターに対応しています。

図 3 の 3 行目は、既定のレイアウト ( ファイル サーバーなどに適した既定の 4 KB の NTFS クラスター サイズ ) を表しています。ディスクをアラインメントしていないため、ユーザー データの 8 つ目の 4 KB クラスターが 2 つのストライプ ユニットにまたがり、最初のストライプ ユニットの末尾 512 バイトから、 2 つ目のストライプ ユニットにかけて存在しています。この既定の構成では、クラスターが 8 つおきに 2 つのストライプ ユニットにまたがって書き込まれます。この状況は残りのパーティションでもまったく同じです。 n 個おきにクラスターがストライプ ユニットの境界をまたがるため、そこでの読み取りや書き込みに 2 回の I/O が必要になります。

図 3 の 4 行目は、パーティションがアラインメント済みの状態を表します。セクターを 1 つスキップし、ユーザー データの最初のクラスターは、 2 つ目のストライプ ユニットの先頭境界に揃えて書き込まれます。

Figure 3

3. アラインメントされていない既定のディスク構成と配置後の構成を示すディスク アーキテクチャに関する模式図 (NTFS 既定の 4 KB クラスター )

SQL Server 推奨のファイル アロケーション ユニット サイズ ( クラスター サイズ ) は 64 KB です。図 4 はこのサイズの場合を表しています。

この図でも、 1 行目はストライプ ユニットに、 2 行目はディスクのセクターに対応しています。

図 4 の 3 行目は、アラインメントされていない既定のパーティショと、 SQL Server 推奨の 64 KB クラスター サイズとの対応を示しています。アラインメントされていないため、ユーザー データが最初のストライプ ユニットの使用可能な先頭セクターから、 2 つ目のストライプ ユニットにかけて存在していて、最初の書き込みが 2 つのストライプ ユニットにまたがって行われます。この状況は、残りのパーティションでもまったく同じです。

この構成では、以降のすべてのクラスターが 2 つのトラックまたは 2 つのストライプ ユニットにまたがって書き込まれるため、すべての読み取りと書き込みに影響します。

図 4 の 4 行目は、パーティションがアラインメント済みの状態を表しています。 1 つのストライプ ユニット全体をスキップし、ユーザー データの最初のクラスターが、最初と 2 つ目のストライプ ユニットの境界に揃えて書き込まれます。 3 行目の説明にあった不適切な状況が解消されています。

Figure 4

4. アラインメントされていない既定のディスク構成と、 SQL Server に適したアラインメントを行った後の構成を示すディスク アーキテクチャの模式図

表示: