物理的なモノは増やせないので、せめて仮想専用サーバ上に移動。
そして、memcachedを使ってみました。
しかし、いくらmemcachedを使っても「全然キャッシュにヒットしない」という問題が生じる。というか、キャッシュしようとしたActiveRecordインスタンスがでかすぎる様子で、どんどんキャッシュが追いやられてしまう状態に。。。
そこで、
という旨を、おしえてついったーしてみたのだけれど、レスがつくほどの人脈はナイのであった。
(ココ本当に教えてほしい、どうかお願いします、お願いします!)
とりあえず、デカさの比較、という意味でこんな方法で比較してみました。
これは断じて、「メモリ量」の比較ではないのですが、大きさを「なんとなく認識」するにはいいかも。
などとなる。
さて、これで、同じデータを扱うActiveRecordと配列の大きさを比較してみると(Akelosで生SQLを扱う方法はこちら)、
なんと、10倍もデカい(ように感じて悶える)。
一覧表示系の画面では、すべて配列取得に変更して、必要なカラムだけ抽出して、取得した配列はmemcachedへ放り込む。
という作戦にしました。
どうだ、ハックだろ!というか、O-Rマッパ以前の普通のスタイルに戻しただけだな。実際のところ、この対処で、負荷試験的にはキャパシティが3倍くらいになった。
疾風のごとく設計&実装できてしまうActiveRecordの優位性を否定するつもりはないけれど、やはりサービスインする時点では、特に参照機能は、SQLと配列での実装に切り替えておくべき。
という自分への教訓でした。
Apacheから、いらないモジュールは全部削除した。
MySQLのquery_cache_sizeの割り当ても忘れない。
これらもかなり重要。