MySQL Performance Blogでインテル製SSDを使って検証した結果がレポートされている。
インテル製SSDはめっぽう早い。彼らのテストでは一秒間に5250回もの書き込みが出来たそうだ。しかしそれはライトバックキャッシュが有効になっているときの話であって、ライトバックキャッシュを無効にすると書き込みは秒間1200回まで低下したらしい。(それでも高速だが。)
で、このインテル製SSDのライトバックキャッシュはくせ者で、バッテリー等で保護されていない。つまり、ライトバックキャッシュにダーティな(まだディスクへの書き出しが完了していない)データが残っていると、ホストの電源断や故障によってSSDに書き込んだはずの(データベースがちゃんと書き込んでキャッシュからディスクへフラッシュしたと思っている)データが失われる可能性があるということである。
現時点ではほとんどのSSDにはバッテリーバックアップなしのライトバックキャッシュが搭載されていると思われる。将来的にはバッテリー付きのものも出てくるんじゃないかと思うけれども、今のところデータが失われてしまう問題があるのでライトバックキャッシュを無効にしてSSDを利用するしかないわけである。
そんなせっかく搭載されてるキャッシュを使わないなんて勿体ないじゃん!
と思うかも知れない。そんなワガママなアナタのために、ライトバックキャッシュつきの高速SSDをデータベースで用いるときの解決策がいくつか考えられるので紹介しよう。
1. DRBDやSemi Synchronous Replicationを用いる。
つまりホスト間でデータを冗長化するわけである。
これなら一台のホスト上でデータが破損してしまっても、もう片方のホスト上にはデータが残っているので問題ない。同時に2台のホストがダウンしなければデータが失われることはない。同時に2台のホストがダウンするのは例えば停電などの理由によるものが考えられるが、UPSでもつけておけばよほどのこと(更に凄いダメージ、例えば火災や地震など)がない限りデータが失われることはないだろう。
DRBDやSemi Synchronous Replicationと組み合わせて利用する場合、高速SSDの恩恵を100%享受できるだろう。ついでにホストも冗長化できて一石二鳥である。SSDの大容量化、低価格化がもう少し進めばこのソリューションが流行るのではないだろうか。
ちなみに、DRBDとSemi Synchronous Replicationについては、過去の投稿で紹介したのでそちらを参照してほしい。
2. RAIDカードにくっつける。
大抵のRAIDカードにはバッテリーが付いており、ライトバックキャッシュが保護されている。そのため、RAIDカードのライトバックキャッシュはSSDのものとは違って急にコンピュータが停止してもダーティなデータが失われることはない。RAIDカードにライトバックキャッシュがついていれば、SSD上のものを無効にしてしまっても性能の低下は最小限に抑えられる。SSD自体への書き込みは高速ではなくなるかも知れないが、性能の低下もなければデータが失われることもないので堅実な解決法だと言える。SSDをミラーリングするような場合にはバッテリー付きのRAIDカードを使うといいだろう。
3. なにもしない。
つまりノーガード戦法!!
取引の記録などのように重要なデータを扱っているのではない限り、最後の数秒間のデータが失われることを覚悟して使うというのも一つの手である。特に、現時点でそのようなことを覚悟して、MyISAMなどトランザクションに対応していないストレージエンジンを利用している場合などは、SSDを使う覚悟はすでに完了しているはずである。高速なMyISAMがさらに高速になるため効果は絶大だろう。また、レプリケーションのスレーブなど別にデータがちゃんとある場合や、定期的なバックアップだけで十分な場合などもノーガード戦法で挑んで問題ないだろう。
ちなみに、ライトバックキャッシュを無効にしても読み込み性能は低下しないのでSSDの高速読込性能の恩恵には預かることができる。従って、ライトバックキャッシュを無効にして堅実に使い続けるというのも案外アリかも知れない。特に参照が多い場合にはSSDを利用する効果は絶大だろう。いずれコンシューマ向けではなく企業向けにバッテリー付きの高速SSDが販売されるようになると思うので、その日までライトバックキャッシュを無効にしたり、上記のような対策で凌ぐといいだろう。
0 件のコメント:
コメントを投稿