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

概要

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

原因

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

その後

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

参考

https://book.cakephp.org/1.3/ja/The-Manual/Developing-with-CakePHP/Models.html#query

https://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#model-query