SSD と ハードディスクを組み合わせてハイブリッドディスクを作成することができる RocketCache という製品があります。
大容量のハードディスクと小容量の SSD を組み合わせたハイブリッドディスクとしては Seagate Momentus XTシリーズ がありますが、RocketCache は自分でハードディスクと SSD を組み合わせてハイブリッドディスクを作成することができるため、大容量の SSD をキャッシュとして使用することができます。
現時点では、RocketCache 3240×8 と RocketCache 3244×8 があるのですが、RocketCache 3240×8 を購入できたので、これを SQL Server のデータベースの格納領域として使用した場合にどのような I/O の傾向になるかを検証してみました。
今回は以下のディスクを組み合わせて RocketCache でハイブリットディスクを作成しています。
- 2.5 インチ 7200 rpm の HD
- 2.5 インチ 120GB の SSD
RocketCache で SSD をキャッシュとして使用した状態 / 使用していない状態で Crystal Disk Mark でベンチマークをした結果が以下になります。
# 左が SSD をキャッシュとして使用していない状態、右がキャッシュとして使用している状態になります。
ハイブリッドディスクは読み取りした内容を SSD のキャッシュに流していますので、書き込みは変わりませんが読み取りに関しては SSD のパフォーマンスが出ていますね。
このディスク I/O の傾向は SQL Server のデータベースを格納した場合にも表れてきます。
以前、SQL Server でメモリが不足するとどのようなことが起きる ? データキャッシュ – の検証を実施した際と同じクエリを使用してパフォーマンスを見ていきたいと思います
今回はディスク I/O を発生させたいので、8GB のテーブルにメモリ 1GB の設定で検証をしています。
RocketCache で SSD のキャッシュをしていない状態ですと以下の処理時間になります。
SSD のキャッシュを有効にすると以下の処理時間になります。
初回の SELECT でデータを読み込んだ際に SSD にキャッシュされますので、サンプリング取得は高速に終了しています。
初回の全件取得で SSD にキャッシュされますので、メモリ上のキャッシュをクリアした後に再度同一の処理を実行すると全件取得の処理も早くなっていることが確認できます。
こちらが I/O を取得した際の情報になります。
上が、SSD のキャッシュを有効にして初回の処理実行 / 下が 2 回目の処理実行となります。
テーブル ‘Table_1’。スキャン回数 9、論理読み取り数 1014536、物理読み取り数 6、先行読み取り数 1004828、LOB 論理読み取り数 0、LOB 物理読み取り数 0、LOB 先行読み取り数 0。 |
テーブル ‘Table_1’。スキャン回数 9、論理読み取り数 1007188、物理読み取り数 120、先行読み取り数 1005005、LOB 論理読み取り数 0、LOB 物理読み取り数 0、LOB 先行読み取り数 0。 |
どちらも同程度の物理読み取り (先行読み取り) が発生しているのですが、アクセスされたデータは SSD に流れていますので、2 回目以降は同じ状態で処理を実行しても速度が向上しています。
読み取りの傾向が高いシステムですと RocketCache は面白い製品かもしれないですね。