none
mdfとldfの保存場所のベスト プラクティスとは・・・ RRS feed

  • 質問

  • SQLServer2008R2を使っています。

    とある人から「mdfとldfの保存場所を別のドライブに設定することがベストプラクティスだよ」と言われましたが
    本当でしょうか?

    単純に障害への影響を最小限にするという意味では分かりますが毎日フルバックアップ取っているので関係ないような気がします。

    上記のような事がSQLServerのベストプラクティスと何処かに書いてあるのでしょうか・・

    皆さん宜しくお願い致します。


    2014年11月6日 3:21

回答

  • やや誤解を招くかもしれないように感じたので、念のため若干補足しておきます。

    ログファイルの書き込みを最適化することで Disk I/O に関わるパフォーマンスをあげる、というところが本質です。
    ログの書き込みは即時に同期で行われますが、データの書き込みはデータバッファと非同期 Writer による処理のため、ログの I/O とデータの I/O の切り替えはそれほど頻繁には起きません。
    ログの I/O はシーケンシャルであるという特徴があるため、ログの I/O のみを行う物理ディスクを用意するとログの I/O が最適化されるため、DB のスループットが向上するというところが最も大きいです。

    あと、やや副次的な側面ですが、データの I/O は本質的にはランダムアクセスでありストライピングやスライシングによる高速化などを図ることになりますので、ログとは最適化の手法が異なるため、物理的に分けるという面もあります。

    「とある人」の言い方は複数の面で不正確ですが、大まかな方向性は間違っていませんので、そのあたりの仔細について知りたい場合は、先にあげた資料を精読されるなり、他の資料を探されるなり、こちらのフォーラムにてご質問されるなり、お好みに応じて行動していただければと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2014年12月2日 8:03
    2014年11月6日 14:52
  • 上記のような事がSQLServerのベストプラクティスと何処かに書いてあるのでしょうか・・

    MSの記事では見つけていないのですが、

    構造上の観点から説明をさせていただきます。

    まず、

    別ドライブにすること自体は、”一般的”に間違いではありません。

    SQL Serverのデータ処理をする際の動作は、(簡単に書くと)以下です。

    -----------------------

    ・ログファイルに、トランザクション処理を書く

    ・データファイルに、書く

    ・ログファイルに、トランザクションが終了したことを書く

    -----------------------

    同一ディスクだと、

    ログファイルの場所からデータファイルの場所にジャンプする必要がでる=ランダムな書き込みをするので、遅延します。

    この点で、遅延を解消する効果が得れる「別のドライブ」に設定することは

    正しい選択です。

    その観点に当てはまらなければ、パフォーマンス面では特に意味はありません。

    例えば、使ってる1つめのドライブが他より圧倒的に早い場合や、

    データベースがほとんど更新さなれない場合(読み取り専用だと、大した差はでにくい)、

    そもそも小規模なDBでパフォーマンスなんてどうでもいい場合など。

    結論としては、

    「間違って無いけど、どこでもいいから別ドライブにすればよいわけでもない。」

    というところです。


    2014年11月6日 7:48

すべての返信

  • パフォーマンスの側面でのベストプラクティスですね。
    耐障害性の側面ではありません。

    色々なところに記載されていますが、例えば以下のページの「ストレージに関するベストプラクティス トップ 10」に用意されているファイルの 6 番目に記載があります。
    http://technet.microsoft.com/ja-jp/sqlserver/bb331794.aspx


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2014年12月2日 8:03
    2014年11月6日 3:44
  • ベストプラクティスの記述も「物理ディスク レベルでデータとログを分離する」ですから質問文の「別のドライブ」という表現では不十分に思います。
    2014年11月6日 4:14
  • 上記のような事がSQLServerのベストプラクティスと何処かに書いてあるのでしょうか・・

    MSの記事では見つけていないのですが、

    構造上の観点から説明をさせていただきます。

    まず、

    別ドライブにすること自体は、”一般的”に間違いではありません。

    SQL Serverのデータ処理をする際の動作は、(簡単に書くと)以下です。

    -----------------------

    ・ログファイルに、トランザクション処理を書く

    ・データファイルに、書く

    ・ログファイルに、トランザクションが終了したことを書く

    -----------------------

    同一ディスクだと、

    ログファイルの場所からデータファイルの場所にジャンプする必要がでる=ランダムな書き込みをするので、遅延します。

    この点で、遅延を解消する効果が得れる「別のドライブ」に設定することは

    正しい選択です。

    その観点に当てはまらなければ、パフォーマンス面では特に意味はありません。

    例えば、使ってる1つめのドライブが他より圧倒的に早い場合や、

    データベースがほとんど更新さなれない場合(読み取り専用だと、大した差はでにくい)、

    そもそも小規模なDBでパフォーマンスなんてどうでもいい場合など。

    結論としては、

    「間違って無いけど、どこでもいいから別ドライブにすればよいわけでもない。」

    というところです。


    2014年11月6日 7:48
  • やや誤解を招くかもしれないように感じたので、念のため若干補足しておきます。

    ログファイルの書き込みを最適化することで Disk I/O に関わるパフォーマンスをあげる、というところが本質です。
    ログの書き込みは即時に同期で行われますが、データの書き込みはデータバッファと非同期 Writer による処理のため、ログの I/O とデータの I/O の切り替えはそれほど頻繁には起きません。
    ログの I/O はシーケンシャルであるという特徴があるため、ログの I/O のみを行う物理ディスクを用意するとログの I/O が最適化されるため、DB のスループットが向上するというところが最も大きいです。

    あと、やや副次的な側面ですが、データの I/O は本質的にはランダムアクセスでありストライピングやスライシングによる高速化などを図ることになりますので、ログとは最適化の手法が異なるため、物理的に分けるという面もあります。

    「とある人」の言い方は複数の面で不正確ですが、大まかな方向性は間違っていませんので、そのあたりの仔細について知りたい場合は、先にあげた資料を精読されるなり、他の資料を探されるなり、こちらのフォーラムにてご質問されるなり、お好みに応じて行動していただければと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2014年12月2日 8:03
    2014年11月6日 14:52
  • 大変参考になりました、自分なりに考えてお客さんに提供したいと思います。

    2014年11月7日 11:17