ディスク - Chapter 3 Disk and File Management
データベースシステムでは、データを永続的なストレージデバイスに保存する必要があります。
ここではストレージデバイスのうち、ディスクドライブとフラッシュドライブについて説明します。
ディスクドライブ
ディスクドライブは名前の通り、ディスク (円盤) が回転してデータを読み書きするストレージデバイスです。
プラッタと呼ばれる円盤が 1 枚以上重なっており、各プラッタの表面にトラックと呼ばれる同心円状の溝が刻まれています。また、トラックはセクタと呼ばれる小さな単位に分割されており、各セクタごとにデータが格納されます。
性能
ディスクドライブの性能は以下の 3 つで考えることができます。
容量 (Capacity)
格納できるバイト数で、プラッタの数 × トラックあたりのセクタ数 × セクタあたりのバイト数で表されます。
単位はバイト (byte) で、最近は GB (ギガバイト) や TB (テラバイト) のものが一般に流通しています。
回転速度 (Rotation speed)
プラッタが回転する速度で、rpm (revolutions per minute) で表されます。
これが速いほど、データを読み書きする速度が速くなります。
一般的な回転速度は 5400 rpm から 15000 rpm です。
転送速度 (Transfer rate)
磁気ヘッドの下を通過するバイト列の速度、つまりメモリとの間のデータ転送速度です。
ディスクアクセス
ディスクへのアクセスは次の 3 つの時間の合計で表されます。
- シークタイム (Seek time) - 目的のトラックまでヘッダを移動させる
- 回転遅延 (Rotation delay) - 読み出したいデータの開始位置がヘッダの下に来るまで待つ
- 転送時間 (Transfer time) - データの終了位置まで回転するのを待つ
実際のディスクアクセス時間は計測することが難しいので、平均値を用いて計算します。
- 回転速度は 1/2 回転とする
- 転送時間は (転送するバイト数) / (転送速度 byte/sec) で計算する
例えば、1 バイトのデータの転送時間は次のように計算できます。
\[\text{1 バイトの転送時間} = \frac{1}{\text{転送速度 (byte/sec)}}\]例えば 、10000 rpm のディスクドライブで、シークタイムが 5 msec、転送速度が 83 MB/s の場合、次のように計算できます。
1 バイトのデータの転送時間
\[T\_\text{1 バイトの転送時間} = \frac{1}{83 \times 1024 \times 1024} = 0.000000012 \text{ sec}\]よって、1 バイトのデータのディスクアクセスにかかる時間は次のように計算できます。
\[T\_\text{1 バイトのディスクアクセス時間} = 5 + 3 + 0.000000012 = 0.005003 \text{ sec}\]- average rotation time = 1/2 _ (1 / 10000) _ 60 * 1000 = 3 msec
- 1 バイトの転送時間 = 1 / (83 _ 1024 _ 1024) = 0.000000012 sec
- 1 バイトのディスクアクセスにかかる時間 = 5 + 3 + 0.000000012 = 0.005003 sec
- 1000 バイトの転送時間 = 1000 _ 0.000000012 = 0.000012 sec
- 1000 バイトのディスクアクセスにかかる時間 = 5 + 3 + 0.000012 = 0.005012 sec
結果から分かるように、ボトルネックはシークタイムなので、1 バイトも 1000 バイトもほぼ同じ時間がかかります。そのため、ディスクから小さいバイトを読み込むのは非効率といえます。
ディスクアクセス時間の改善方法
ディスクアクセス時間の短縮方法としては以下の 3 つがあります。
ディスクキャッシュ
ディスクドライブに付属するメモリで、最近アクセスしたデータをキャッシュしておくことで、次回のアクセスを高速化します。
データベースエンジンではそれ自体がキャッシュ機能を持つため、あまり有効ではありません。
シリンダ
シリンダは、同じトラック番号を持つトラックの集合です。
関連データを同じシリンダに格納することで、シークタイムを短縮できます。
ディスクストライピング
ディスクストライピングは、複数のディスクドライブを使用して、データを分散して格納する方法です。OS からは 1 つの論理ドライブとして見えます。
RAID
RAID (Redundant Array of Independent Disks) は、ストライピング、ミラーリング、パリティを組み合わせたディスクの実装戦略です。最も使われるのは RAID-1 または RAID-5 です。
ここでは説明を省略します。
フラッシュドライブ
フラッシュドライブはフラッシュメモリを用いたストレージです (SSD や USB)。
ディスクドライブにおいてブロックアクセスの際ボトルネックとなっていたシークタイム (目的のトラックまでヘッダを移動させる時間)が、フラッシュドライブの場合は約 50 マイクロ秒と、ディスクドライブに比べ 100 倍以上速く、高速にデータへアクセスできます。
項目 | ディスクドライブ | フラッシュドライブ |
---|---|---|
アクセス速度 | 遅い | 速い |
価格 | 安い | 高い |
耐振動性・耐衝撃性 | 低い | 高い |
消費電力 | 高い | 低い |
フラッシュドライブは OS に対しセクタベースのインターフェースを提供し、見かけ上はディスクドライブと同じように振る舞います。