サーバのHDD
新しく借りたサーバのセッティングをしていて、必要と思われる設定が一通り終わって、コンテンツの移行も試してみて、WEBサイトが新しいサーバで閲覧できるようになったのも確認して、最後にDB更新用のbatch処理を動かす段階になって気付いた。どうもDB更新系の処理が、移行前の環境よりも3〜5倍くらい遅い。
処理としては、5桁件数のレコードをselect後にinsertかupdateを行うだけのシンプルなもので、サーバが新しくなったことでselectが劇的に早くなっていることはEXPLAIN ANALYZEで確認済み、insertとupdateにかかるコストもEXPLAIN ANALYZEによると、少なくとも遅くなる要因が見えない。
となると、思い当たる原因はHDDのI/Oくらいのもので…。で、いろいろ情報を集めてみたところ、dbenchを使うとスループットの測定が簡単にできるらしい、ということだったので、実際に試してみたところ。計測された結果はこんな感じだった。
Throughput 6.63792 MB/sec 2 clients 2 procs max_latency=329.013 ms
うぅむ、これが速いのか遅いのか判断基準が自分の中に無いのではっきりしたことは言えないのだが…いや、やっぱりどうみても遅いだろう、この数字。
丁度2ヶ月前に、同じホスティング業者から同じスペックのサーバを借りていて、OSのバージョンが違うので単純比較が出来ないとは言え、参考にはなるだろうと思ってそのサーバでも計測してみたら…。
Throughput 105.046 MB/sec 2 clients 2 procs max_latency=3592.305 ms
桁が違うじゃねーかw
というわけで、ホスティング業者に連絡してみたところ、ハード毎交換してもらうことになった。これまで何度もサーバを借りてきたけど、はずれHDDをひいたのは今回が初めてだった。やっぱりあるんですね、こういうことは。ここまでやってきた設定がリセットされてしまうが、こればかりは仕方がない。まだサーバを本格稼働させる前に気付いて良かったと思いたい。
今日の教訓。サーバを借りたら、念のためディスク性能のチェックは最初に必ず行おう。