PHP7にアップグレードしていくつかのSQL文が機能しなくなり、代わりにメモリが不足していることに気がつきました。PHP7のPDO extは結果セット全体をメモリに読み込みますか?
私はこのコードを持っている:
$query = Yii::$app->db->createCommand('select * from tbl_title')->query();
while ($row = $reader->read()) {
var_dump($row);
exit();
}
をそしてYii2のデータベース抽象化は、PDOのオーバーだけで非常に薄い層であり、余分な何もしません。 query()
は、プロファイリングのためにログファイル(Yii2's)に行を追加し、reader->read()
はPDOストリームのfetch()
関数を呼び出します。
しかし、それはメモリすなわち、私のテーブルのサイズ(スペース使用)を引用し、プロセスメモリの385メガバイトを割り当てるしようとしているのを使い果たし:
排出134217728バイトの可メモリサイズが(385883840バイトを割り当てしようとした
)
結果セットがPHPプロセスの128 MBの制限に完全に当てはまるクエリを使用すると、スパナとして動作します。
PHP7が変更されました。変更することはできますか?
ネストされたクエリを実行して行数を取得できないなどの副作用に留意してください。 –
ええと、バッファリングされていない他のすべてのクエリもブロックします – Sammaye