LoginSignup
2
1

More than 5 years have passed since last update.

QueryBuilderを使うときのfetchAll系に気をつけろ

Posted at

概要

働いていてやばいなーと思ったこと(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件

=> ユーザに伝える件数はサービスやどの機能に適用したか(その機能が頻繁に使われるか)によるのでそこは考える必要がある。

技術面

  1. クエリにLimitかける。
  2. クエリのパフォーマンス改善

だいたいこの二つかと考えられる。

他にもあれば、コメントいただけると助かります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1