Skip to content

MS_SQLServerFileLayout

nishi_74322014 edited this page Aug 13, 2026 · 1 revision

SQL Server のファイルの配置

概要

ディスク コントローラのスループットは制限されている。

  • 多くの物理ディスクを一つのディスク コントローラに関連付けると、
    ディスク コントローラの I/O ボトルネックを引き起こす可能性があるので注意する。

  • ディスク アレイ上の、複数のディスク コントローラ、物理ディスクに
    以下のデータベース・ファイルを分離して配置することにより、性能を改善できる。

SQL Server のファイルの配置

データベース・ファイル

分離して配置するデータベース・ファイル。

ユーザ データベース

例えば、「データ ファイル」、「トランザクション ログ ファイル」の物理ディスクを分けた場合、
「トランザクション ログ」の書き込み処理による割り込みがなくなり、高速になる。

データ ファイル

トランザクション ログ ファイルと異なるドライブに配置する。

トランザクション ログ ファイル

データ ファイルより信頼性の高いドライブに配置する(RAID(MS_RAID.md))。

補足(なぜログを分けるのか): 分離の理由は「割り込みを減らす」以上に、
アクセス パターンが根本的に違うことにある。

データ ファイル トランザクション ログ
アクセス ランダム読み書き シーケンシャル書き込み
書き込み契機 チェックポイント時にまとめて コミットごとに同期書き込み
遅延の影響 クエリが遅くなる 全トランザクションのコミットが待たされる

ログ書き込みは WAL(Write-Ahead Logging)の原則により
コミットの完了を直接ブロックするため、
ログ ディスクの書き込みレイテンシがそのまま更新スループットの上限になる。
待ち事象では WRITELOG として現れる
SQL Server のログ
SQL Server の障害復旧を参照)。

また、ログ ファイルは複数用意しても並列には書かれない
(順番に使われるだけ)ため、1 本にして速いディスクに置くのが正しい。

システム データベース

tempdbのデータ ファイル

「tempdb」はグローバル リソースであり、さまざまな操作の共有作業領域として作成される。

「tempdb」を利用する操作には、次のような操作がある。

  • 一時テーブルの使用
  • サーバ カーソル(結果セットを保存する)
  • ORDER BY(並び替えのため)
  • GROUP BY(集計のため)
  • DISTINCT(重複行を削除するため)
  • 副問合せ(内側のクエリの結果を保存する)
  • UNION
  • ,etc.

「tempdb」を多用する SQL Server 環境では、「tempdb」を他の「データ ファイル」、
「トランザクション ログ ファイル」とは別のディスクに置く。
これによって、「tempdb」に対する I/O 操作と並行して、
関連するトランザクションの I/O 操作を実行できるため、パフォーマンスが向上する。

補足(tempdb を使うのはユーザの一時テーブルだけではない):
上記に加え、以下も tempdb を消費する。

  • バージョン ストア(RCSI / SNAPSHOT 分離レベル、
    オンライン インデックス再構築、トリガの inserted / deleted
  • ワークテーブル / ワークファイル(ハッシュ結合、ハッシュ集計、スプール)
  • ソートのオーバーフロー(メモリ グラントで足りない分)

つまり、分離レベルに RCSI を選んだ時点で
tempdb の重要度が一段上がる
SQL Server でのロック・タイムアウト参照)。

補足(最新化:tempdb の構成): 参考にある
「tempdb データファイル数を CPU 数に一致させる」は
割り当てページ(GAM / SGAM / PFS)の競合を緩和するための指針だが、
現在の推奨はもう少し具体的になっている。

  • 論理プロセッサ数と同数、ただし 8 を超える場合は 8 から始め
    競合(PAGELATCH_UP 待ちが 2:1:1 などのページに集中)が
    続く場合に 4 ずつ増やす
  • 全ファイルを同じ初期サイズ・同じ自動拡張量にする
    (比例塗りつぶしアルゴリズムが均等に配分されるようにするため)
  • SQL Server 2016 以降は、セットアップ時に本数と初期サイズを指定でき
    TF 1117 / TF 1118 相当の挙動が tempdb では既定で有効
  • SQL Server 2019 以降は、システム テーブルの
    メモリ最適化 tempdb メタデータを有効化でき、競合をさらに減らせる

なお、tempdb は再起動のたびに作り直されるため
冗長性は不要で、最も速いローカル ディスク(NVMe SSD)に置くのが定石。
ログ ファイルとは異なり、耐障害性より速度を優先してよい数少ない領域である。

参考

関連


Tags: 移行, データアクセス, SQL Server

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally