平均すると、ホットキャッシュによるパフォーマンスは、SSDとハードディスクのどちらのインデックスでも速度的によく似ており、SSDでの必要な時間はハードディスクのインデックスで同じクエリを使用したときの70~85%になった。しかし、Nevadaに関するデータを検索したとき特異的な現象が起こり、ホットキャッシュの使用時にSSDのインデックスでは5ミリ秒しかかからないのに、ハードディスクのインデックスでは約200ミリ秒もかかった。Nevadaだけパフォーマンスが異なる理由は、よくわからない。
以下のグラフは、コールドキャッシュとクロスキャッシュ関して、SSDのインデックスとハードディスクのインデックスのパフォーマンスを比較したものだ。コールドキャッシュの場合、SSDのインデックスはハードディスクのインデックスのときの3~10%程度の時間でクエリを解決できている。コールドキャッシュでパフォーマンスが最低となるクエリはFloridaで、これは他のケースよりも多くのタプルをフェッチする必要があるからだ。また、FlordaについてはSSDインデックスで必要な時間がハードディスクインデックスでの時間の10%となっているが、これは多分、インデックスそのものよりもベーステーブルに関する負荷が大きいせいだ。クロスキャッシュを使うクエリの結果は興味深い。前回のクエリでインデックスの一部のページがRAMにキャッシュされていても、SSDはハードディスクキャッシュのときの20%以下で同じクエリを実行できている。
|
| SSD vs HDD for Postgres index |
まとめ
SSDの最大容量は従来のハードディスクに比べるとまだ小さく、ギガバイト当たりのコストもかなり高く付くが、1台のSSDにより得られるシークタイムは6台のハードディスクで構成されるハードウェアRAIDよりも優れている。データベースサーバーを運用していて、インデックスページのキャッシュに使えるRAMを既に限界まで増設している場合、さらにパフォーマンスを上げる必要があるなら、データベースのインデックスのパフォーマンスを引き上げるために32GBか64GBのSSDを増設することを検討してもよいだろう。
Ben Martinは、ここ10年以上ファイルシステムに取り組んできた。博士号を取得し、現在はlibferris、各種ファイルシステム、検索ソリューションを中心にコンサルティングサービスを手がけている。
