現在、さくらVPSの1GBで短縮URLサービスを運営しています
最近アクセスが増えて重くなってきたので、VPSの2GBかSSDの1GBに乗り換え検討しているのですが、
SQLからUNIQUEなIDに対応するURLを引っ張ってくるサービスの場合は、メモリが多いHDDとメモリが少ないSSD、どちらがいいのでしょうか。
さくらインターネットでは同メモリ容量のHDDに比べてSSDは従来比7倍のストレージ性能だと宣伝していますが、
メモリが多いHDDと比較した場合、どちらがいいのか参考になる資料が見当たりませんでした。
現在の環境はCentOS6+Nginx+PHP+MySQLです。
専門家の方の意見をお待ちしています。よろしくお願いいたします。
ただしVPS環境なので、どの位の期間キャッシングが保持できているかは、環境によって異なるので何とも言えません。2GBのメモリでアクティブなサーバが5台程度が同居しているようですと、キャッシュには残らないと考えてください。
これはディスクアクセスについても言えることです。他のアクティブなサーバがディスクI/Oを頻繁に行っているとすると、HDDでもSSDでも速度は稼げません。
Nagiosで監視されているようなので、まずはどのクエリーで負荷がかかっているのか分析してください。クエリーの改善ないしはデータベースの最適化を検討した方が良いと思います。
それも難しい場合は、専用サーバへの移行を検討してください。
まずはさくらVPSの構成など整理を。
少し古いですが、さくらのVPSの構成を妄想してみました。 - とあるプログラマの日記 @s025236記事を参考にした纏めがあります。
遊んでいるメモリをキャッシュに使うので便利ですね。
丁度さくらVPSの2GBプランを契約しているので、fioにて調べてみました。
Starting 1 process random-read: Laying out IO file(s) (1 file(s) / 128MB) Jobs: 1 (f=1): [r] [91.7% done] [13442K/0K/0K /s] [3360 /0 /0 iops] [eta 00m:01s] random-read: (groupid=0, jobs=1): err= 0: pid=22110: Sun Feb 24 07:39:27 2013 read : io=131072KB, bw=11976KB/s, iops=2993 , runt= 10945msec clat (usec): min=131 , max=184961 , avg=328.08, stdev=1272.51 lat (usec): min=131 , max=184962 , avg=328.57, stdev=1272.52
random-readでは、IOPSは3000近いですね。
ちなみに8kで行うと、
random-read: (groupid=0, jobs=1): err= 0: pid=22149: Sun Feb 24 07:40:42 2013 read : io=8192 B, bw=8000.0KB/s, iops=2000 , runt= 1msec clat (usec): min=369 , max=422 , avg=395.50, stdev=37.48 lat (usec): min=370 , max=423 , avg=396.50, stdev=37.48
このようになります。(8Kbなのできちんとデータが出ません。)
※他社のVPSについては割愛します。
以上を踏まえて、まずは何処が原因であるかを判断する必要があります。
身も蓋もない話になりますが、もしかすると、URLの管理は現状通りSQLにて、実際のURL変換はPHPにてファイルを読み込みとするとパフォーマンスが上がるかもしれません。
>メモリが多いHDD
こちらが良いと思います。
実際には、現状どういう感じの負荷がかかっているかを調査されるべきかと思います。
また、MySQLの設定によりますが、データはメモリーにある程度キャッシングされるはずです。
重いのは、1秒あたりのリクエスト数が増えてるからではないか?と思います。
その場合、どっちにしてもまずはメモリーを増やさないと、ダメだと思います。
たぶんCPU負荷がかかっている状態なのではないでしょうか?
この場合は、メモリーを増やすべきだと思います。
>SQLからUNIQUEなIDに対応するURLを引っ張ってくるサービスの場合
逆に、この程度の処理にSSDの性能が必要かどうかが逆に疑問
実際には、メモリーが1Gでは、MySQLを使う環境としては少ない方なので、メモリーを増やしたほうがDB的にもよさそうに思う。
http://vps.sakura.ad.jp/ssdplan.html
使い道によって変わりますね。
>SSDプランは高いIOPSが特長ですので、データベースなど高いストレージ性能が必要な場合などにおすすめです。
とのことなので質問者さんの状況にあったほうを選べばいいと思います。
コメント(1件)
sysstat(sar)やiostat、top等で各種統計値を確認し、現在負荷が高い要素がどこにあるのかを確認してください。
不足しているのはメモリなのでしょうか? 実はメモリじゃなくてCPUだったりすると、メモリの増量もストレージのSSD化もほとんど無意味で、CPUコア数の方がキモになってくるかもしれません。
また、MySQLのメモリ周りの設定値はどう設定され、実データ量はどのぐらいなのでしょうか。
もしデータが全てメモリに乗るほど少なかったとしたら、SSDにしてもほとんど恩恵は受けられないだろうと予測が立ちます。