データベース勉強中 SQL Server 1-2
データベースファイルへのアクセスパターン
SQL Serverがデータベースを構成する物理ファイルへアクセスする際は
いくつかのパターンが存在する。
データファイルに対して
- オンライントランザクション処理(OLTP)システムの場合
数多くのクライアントが、それぞれごく狭い範囲のデータを参照、更新する。
また、各クライアントが必要とするデータの種類や分布範囲はまちまちなので
データファイルの格納されたデータがファイルないの様々な場所に点在している可能性が高くなる。
その結果として、データファイルへのアクセスはファイル全体にランダムに発生する傾向が強くなる。
- 意思決定支援システム(DDS)の場合
少数クライアントが大規模な読み込みを行う。
クライアントが必要とするデータは「ある履歴の過去10年分」といった
一定の連続性を持ったデータである場合が多くなる。
テーブルのデザインにも左右されるが、多くの場合は結果として、データファイルへの順次アクセスが行われる傾向が強くなる。
ログファイル
先行書き込みログのログファイルへの更新内容の書き込みは
必ず時系列順に行われる。
複数の更新処理がデータベースで実行されている場合でも
それぞれの変更内容が行われた順序どおりにディスク上のログファイルに書き込まれていく。
つまりディスクへの書き込みを行うポイントは常に1箇所。
そのため、ディスク装置に複数のスピンドルが存在しても、その恩恵を受けることはできない。
データベース勉強中 SQL Server 1-1
データベースは物理的には
データファイル(.mdf、.ndf)
ログファイル(.ldf)で構成されている。
データファイル(.mdf、.ndf)
ユーザが参照・挿入・更新・削除を行う
データ本体が格納されている。
SQL Serverはデータファイルの中を8KBのブロック(ページ)に
論理的に分割して使用している。
ページは物理ディスクの読み書きの際の最小の論理的な単位。
1つのデータベースに対して、1つのデータファイルを指定することも
複数のデータファイルを割り当てることも出来る。
一般的に、複数のスピンドル(*1)を持つディスク装置にデータベースを配置する場合は、
データファイルを複数に分割したほうが物理アクセスの速度が向上する。
ログファイル
SQL Serverが管理するデータに対して実行した更新内容を記録する。
データに対して更新が行われると
データ更新前に変更内容の履歴をすべて物理ディスクに存在するログファイルに書き込む。
変更に関するログがすべて正しく書き込まれると、データ更新処理が実行される。
この動作は「先行書き込みログ(Write Ahead Logging)」と呼ばれ
トランザクションとデータの関係を維持するために、重要な役割を持っている。
*1. ここでのスピンドルは、回転軸を保有するディスク装置を意味する。