-
Notifications
You must be signed in to change notification settings - Fork 0
MS_SQLServerFileLayout
- 戻る(SQL Server)
- SQL Server のファイルの配置
- RAID(
MS_RAID.md) / SQL Server のファイル・グループ / SQL Server パーティション分割
ディスク コントローラのスループットは制限されている。
-
多くの物理ディスクを一つのディスク コントローラに関連付けると、
ディスク コントローラの I/O ボトルネックを引き起こす可能性があるので注意する。 -
ディスク アレイ上の、複数のディスク コントローラ、物理ディスクに
以下のデータベース・ファイルを分離して配置することにより、性能を改善できる。

分離して配置するデータベース・ファイル。
例えば、「データ ファイル」、「トランザクション ログ ファイル」の物理ディスクを分けた場合、
「トランザクション ログ」の書き込み処理による割り込みがなくなり、高速になる。
トランザクション ログ ファイルと異なるドライブに配置する。
データ ファイルより信頼性の高いドライブに配置する(RAID(MS_RAID.md))。
補足(なぜログを分けるのか): 分離の理由は「割り込みを減らす」以上に、
アクセス パターンが根本的に違うことにある。
データ ファイル トランザクション ログ アクセス ランダム読み書き シーケンシャル書き込み 書き込み契機 チェックポイント時にまとめて コミットごとに同期書き込み 遅延の影響 クエリが遅くなる 全トランザクションのコミットが待たされる ログ書き込みは WAL(Write-Ahead Logging)の原則により
コミットの完了を直接ブロックするため、
ログ ディスクの書き込みレイテンシがそのまま更新スループットの上限になる。
待ち事象ではWRITELOGとして現れる
(SQL Server のログ、
SQL Server の障害復旧を参照)。また、ログ ファイルは複数用意しても並列には書かれない
(順番に使われるだけ)ため、1 本にして速いディスクに置くのが正しい。
「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)に置くのが定石。
ログ ファイルとは異なり、耐障害性より速度を優先してよい数少ない領域である。
-
DO's&DONT's #17: やっておいた方がいいこと
tempdb データファイル数を CPU 数に一致させる – Microsoft SQL Server Japan Support Team Blog
https://learn.microsoft.com/ja-jp/archive/blogs/jpsql/ -
tempdb データベース | Microsoft Learn
https://learn.microsoft.com/ja-jp/sql/relational-databases/databases/tempdb-database
Tags: 移行, データアクセス, SQL Server
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。