CakePHPのモデルでメモリを消費した話

概要

CakePHP1系のアプリケーションでメモリリミットが起きていました。 原因を調査したところ、Primarykeyに検索をかけるだけの単純なクエリ実行で、メモリを多めに消費していることがわかりました。

原因

CakePHP1系のキャッシングが原因でした。 queryメソッドを使ってSQLを実行する場合、第2引数にfalseを渡さないとキャッシングしてしまいます。その結果、想定より多めにメモリを消費していました。

その後

原因がわかったので、第2引数にfalseを渡すことで解決できそうです。 ちなみに先輩からはバグだと言われましたが、2系でも同様の処理があるので、これはCakePHPの仕様なんだろうなと思います。

参考

モデル - 1.3

データを取得する - 2.x