クエリを呼び出す前のメモリ使用量は 635384 バイトです。クエリは、レコードごとにチャンクで割り当てられると思います。
ディンディンディン!
MySQL に接続するとき、PHP はバッファリングされたクエリの使用を好みます。これは、接続に使用している方法に関係なく当てはまります。バッファリングされたクエリを使用すると、要求時にフェッチされるのではなく、結果セット全体がすぐにフェッチされます。これは通常、往復が少ないため、パフォーマンスに適しています。
しかし、PHP のすべてと同様に、落とし穴があります。バッファリングページに記載されているように:
libmysql をライブラリとして使用する場合、PHP のメモリ制限は、データが PHP 変数にフェッチされない限り、結果セットに使用されるメモリをカウントしません。mysqlnd を使用すると、計算されるメモリには完全な結果セットが含まれます。
PHP 5.3 を使用しています。これは、mysqlnd を使用している可能性が高いことを意味します。
ここでは、バッファリングされたクエリをオフにする必要があります。これは、MySQL へのすべての PHP インターフェイスで異なる方法で行われます。
- PDO の場合、
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
属性をに設定する必要がありますfalse
。
- mysqli の場合、
MYSQLI_USE_RESULT
定数をquery
メソッドに渡す必要があります。
- mysql の場合、
mysql_unbuffered_query
の代わりにを呼び出す必要がありますmysql_query
。
完全な詳細と例は、ページにあります。
巨大でバッファリングされていないクエリの落とし穴!
別のクエリを発行する前に、ステートメント ハンドルを適切に閉じ、結果セットを解放する必要があります。
これを行わないと、エラーが発生します。