none
SQL Server2008のパーティション分割について RRS feed

  • 質問

  • SQL Server2008初心者です。宜しくお願いします。

    SQL Server2008 Enterprseを導入し、明細1テーブルと明細2テーブルの2種類のテーブル
    (それぞれを月毎のテーブルに分けているので、12DB×2あります)
    をSQL Server2005(Standerd)から移行しようと思っています。

    2008移行後は月毎に分割していたテーブルを、1つのテーブルにしてパーティション分割しようと考えてます。

    この時の明細1、明細2テーブルのファイルグループをどこに作成するのがいいか判断しかねています。

    現在SQL Server2008が導入されているサーバの構成は
     Xeon クワッドコア×4
     ディスク 450G ×4(Raid10)をHドライブに割当てています  <容量は約800G>
     DASに450Gのディスク×4をRaid5 でIドライブに割当てています <容量は約1.5T>。

    Microsoftのパーティション分割に関するWEBサイトを参考(http://msdn.microsoft.com/ja-jp/library/cc411400.aspx)に
    作成していますが、ここでの推奨は、各ファイルグループは別々のディスクに配置するのが理想的との記述があります。

    当方の明細1テーブルと明細2テーブルは2年間(24ヶ月)分あり、それぞれを別ディスクに配置するとすれば、パフォーマンスを
    最も最適にするのであれば48のディスクが必要となるのでしょうか?

    私はてっきりディスク 450G ×4(Raid10)の構成をし、割当てたHドライブに
    48ファイルグループを格納すれば、それぞれが並列で処理(CPU数分)するものと思っていたのですが、
    全てのファイルグループを並列に処理しようとするならば、例えばHドライブ(450G ×4(Raid10))の構成を
    複数ドライブ保有しなければならないのでしょうか?
    (ファイルグループ1はHドライブ、ファイルグループ2はIドライブ、ファイルグループ3はJドライブ・・・のように)

    もし、上記のように複数のドライブを作成しなければならない場合、コスト的にもNGとなってしまう(高額すぎるので)ので、
    現在の構成で運用する場合、Hドライブと、DASに設定している Iドライブ にファイルグループを配置するのが最適となる
    のでしょうか?

    当方勉強不足と実務経験の浅さから、Raid構成とパーティションの最適化の判断が付きかねています。
    ご存知の方がいらっしゃれば、ご教授願います。


    ちなみに、明細1と明細2テーブルはそれぞれ主に前年対比の処理がメインとなっています。
    ですので、今年のファイルグループはHドライブに、前年のファイルグループはDAS側に配置
    するのがいいのでしょうか・・・?

    2009年2月11日 4:52

回答

  • こんにちは、naginoです。

    今回の焦点はデータに関するディスク構成ということですよね。
    キャッシュや tempdb、トランザクションログなどのことは考慮しないということですよね。
    # データ配置だけで全てのパフォーマンスが決まるわけではない点に注意してください。

    テーブルが 2 つあり、それぞれ同時に 24 アクセスするなかで最もパフォーマンスが期待できるディスク構成は、ということでしたら、48 ドライブ用意することになるでしょう。
    実際は Windows のドライブレターは A~Z までしか扱え無かったと思いますので、実現は無理でしょう。

    で、2 つの点を考慮する必要があります。
    1 つはお気づきですが、どこまで予算が用意できるのか、です。
    それによって取れる構成の上限が決まります。
    構成にもよりますが、ディスクの本数が多ければ多いほど、パフォーマンスをあげる余地が大きくなります。
    # ドライブの数も、1ストライピングあたりのディスク数も増やせますので。

    もう 1 つは、システムの処理特性、特にメインターゲットとしている処理の並列処理の度合いを考慮する必要があります。
    前年対比の処理がメインと書かれていますので、並行でアクセスするのは明細1の去年、今年、明細2の去年、今年、の 4 つということでしょうか。
    そうであれば、4 つのドライブを用意してデータをそれぞれ明細1の去年 12 ヶ月分、明細1の今年 12 ヶ月分、明細2の去年 12 ヶ月分、明細2の今年 12 ヶ月分に分けて配置するのが妥当なところかと思います。
    並列クエリで同時に処理しているのであれば、その分データを分散させたほうがパフォーマンスが期待できます。
    あるいは、そもそも明細1と明細2は同時に処理していないのであれば、2 つのドライブで十分でしょう。

    結局、RAID の組み方でもパフォーマンスは変わってきますので、ハードの構成次第で話は際限なく広がります。
    仮に全て読み込みのみの処理で、現在の 2 ドライブ構成で最大のパフォーマンスを、ということであれば、Hドライブ(RAID 10)側に今年のデータとトランザクションログ、Iドライブ(RAID 5)側に去年のデータとコア数分に分けた tempdb を配置というところでしょうか。

    なんともとりとめも無い話になってしまいましたが、多少でもご参考になりますでしょうか。
    きりがなくなってしまうためにあえて言及していない箇所もありますので、人によって上記内容にご反論もあるかと思います。
    上記が全てではない点もあわせてご承知置きください。
    # このあたりは PASSJ の理事の方々が詳しそうなのですが・・・。

    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 山T 2009年2月23日 13:07
    2009年2月23日 6:02

すべての返信

  • こんにちは、naginoです。

    今回の焦点はデータに関するディスク構成ということですよね。
    キャッシュや tempdb、トランザクションログなどのことは考慮しないということですよね。
    # データ配置だけで全てのパフォーマンスが決まるわけではない点に注意してください。

    テーブルが 2 つあり、それぞれ同時に 24 アクセスするなかで最もパフォーマンスが期待できるディスク構成は、ということでしたら、48 ドライブ用意することになるでしょう。
    実際は Windows のドライブレターは A~Z までしか扱え無かったと思いますので、実現は無理でしょう。

    で、2 つの点を考慮する必要があります。
    1 つはお気づきですが、どこまで予算が用意できるのか、です。
    それによって取れる構成の上限が決まります。
    構成にもよりますが、ディスクの本数が多ければ多いほど、パフォーマンスをあげる余地が大きくなります。
    # ドライブの数も、1ストライピングあたりのディスク数も増やせますので。

    もう 1 つは、システムの処理特性、特にメインターゲットとしている処理の並列処理の度合いを考慮する必要があります。
    前年対比の処理がメインと書かれていますので、並行でアクセスするのは明細1の去年、今年、明細2の去年、今年、の 4 つということでしょうか。
    そうであれば、4 つのドライブを用意してデータをそれぞれ明細1の去年 12 ヶ月分、明細1の今年 12 ヶ月分、明細2の去年 12 ヶ月分、明細2の今年 12 ヶ月分に分けて配置するのが妥当なところかと思います。
    並列クエリで同時に処理しているのであれば、その分データを分散させたほうがパフォーマンスが期待できます。
    あるいは、そもそも明細1と明細2は同時に処理していないのであれば、2 つのドライブで十分でしょう。

    結局、RAID の組み方でもパフォーマンスは変わってきますので、ハードの構成次第で話は際限なく広がります。
    仮に全て読み込みのみの処理で、現在の 2 ドライブ構成で最大のパフォーマンスを、ということであれば、Hドライブ(RAID 10)側に今年のデータとトランザクションログ、Iドライブ(RAID 5)側に去年のデータとコア数分に分けた tempdb を配置というところでしょうか。

    なんともとりとめも無い話になってしまいましたが、多少でもご参考になりますでしょうか。
    きりがなくなってしまうためにあえて言及していない箇所もありますので、人によって上記内容にご反論もあるかと思います。
    上記が全てではない点もあわせてご承知置きください。
    # このあたりは PASSJ の理事の方々が詳しそうなのですが・・・。

    MCITP(Database Developer/Database Administrator)
    • 回答としてマーク 山T 2009年2月23日 13:07
    2009年2月23日 6:02
  • nagino 様

    ご回答ありがとうございます。
    また、返信が遅れてしまい、申し訳ありません。

    やはり1ディスクあたり1パーティションの構成が最も効果的ということですね。
    48ディスクを用意することは出来ないので、そうなるとどのデータとどのデータを並列処理させるか・・・ここは業務と兼ね合いで検討するところですね!

    ご回答の内容、大変参考となりました。

    今後、参考にさせていただきたいと思います。有難うございました!

    2009年2月23日 13:06