ストレージの構成を決定する際に考えること
今回はSQL Serverのデータベース エンジンの物理設計の基本について、ストレージとメモリの観点から解説します。
SQL Serverの物理設計時にパフォーマンスに一番影響が大きいのがストレージです。ストレージの構成を決定する際に考慮する必要があるのは、大きくは次の2点、ストレージ自体のパフォーマンスと、その上のデータベースファイルの配置です。ストレージ自体のパフォーマンスは、基本的には物理的なディスクを組み合わせた論理ディスクのパフォーマンスと、ストレージのコントローラやホスト バス アダプタなどの論理ディスクに至るデータの通り道のパフォーマンスで決まります。現在エンタープライズ向けシステムで採用されているハードディスクは8KバイトのランダムIO時に10K RPMのもの1本あたりフル ストローク時で100-130 IOPs(秒間のIO回数)、15K RPMであれば150-180 IOPs程度、またシーケンシャル アクセスであれば90MB/Secから125MB/Secぐらいの性能が出るようです。これ以上の性能を期待する場合には物理ディスクを複数同時に使用してストライピングを構成します。ストライプセット中の物理ディスク(スピンドル)の数が多くなればなるほど、性能は上がります。購入するストレージの物理ディスクの本数を決める際に、データ容量をもとに決めるのではなく、要求されるIOパフォーマンスから決めることが、パフォーマンスの高いシステムを実現するためには必要です。もちろん冗長性のためにミラーも重要です。
これらをシステムのワークロード毎の特性に応じて、例えば OLTP型のワークロードでは主に8KBのページごとのランダムIOが主な負荷となるので、そこで必要なIOPSを念頭に物理ディスク数を決定します。データウエアハウス型ではシーケンシャル リードを重要視して、データの流量をもとに構成します。その際ストレージのコントローラやホスト バス アダプタの性能についても、物理ディスクからのデータを効率よく転送できるように複数の機器を使用するなどの構成を検討してください。
どのようなストレージを使う場合にも、その基本的な性能を把握しておくことは良いことです。ストレージの構成がひととおり終わったところで、性能の測定を行って確認してください。SQLIOなどを使用して、ランダムIOとシーケンシャルIOそれぞれについて、Read/Writeが秒間どのぐらいの回数可能で(IOPS)、どの程度のデータ量が転送できるか(MB/s)を調べることが可能です。SQLIOについてはこのページをご参照ください。もしスペックと比較して満足な数値が出ていない場合には、正しく構成できているか、ドライバ、あるいはファームウエアは最新かなどの確認が必要です。ストレージの専門家に相談する必要があるかもしれません。