概要
働いていてやばいなーと思ったこと(PHP)があったので、戒めを込めて書く。
fetchAll
大変便利。しかし何も考えずに使うと
サービスが大きくなった時に痛い目見る。
痛い目=> BadGateWay 502
要するにメモリオーバーが起こる。よく見るエラーはこんな感じ。
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes) in phar:[ファイル名].php on line [~行目]
もともとあまり多くselectしねーだろとか思って油断していると起こる。
例えば100件とか程度の負荷を想定しててもユーザに1万件とかやられるとただただ辛い。
対策
運用面
fetchAllを使うのであれば、何件程度まで耐えられるのか負荷テストをするのがオススメ。そして耐えられる件数にバッファを考慮した件数をユーザに伝える。
例:
負荷テストで落ちなかった限度の件数: 100件
ユーザに伝える件数:50件
=> ユーザに伝える件数はサービスやどの機能に適用したか(その機能が頻繁に使われるか)によるのでそこは考える必要がある。
技術面
- クエリにLimitかける。
- クエリのパフォーマンス改善
だいたいこの二つかと考えられる。
他にもあれば、コメントいただけると助かります。