php検索mysql大量データによるメモリ不足の解決方法
本論文の実例は、phpクエリmysqlの大量データによるメモリ不足の解決方法を分析した。皆さんの参考にしてください。具体的な分析は以下の通りです。
一、問題
phpを使ってmysql大データ量を調べた時、プログラムはまだ実行済みでなく、警告が出ます。
Fatal error: Allowed memory size of 100663296 bytes exhausted(tried to allocate 103 bytes)
エラーメッセージ:phpに割り当てられた100 Mメモリが占有されました。
二、解決方法:
最も簡単な解決方法は、実行ファイルのヘッダの増加です。
しかし、今度はもっと多くのデータを読み込むにはどうすればいいですか?
ここでは関数を紹介します。
メモリを使うゲットするusage()メソッドは、phpで使用するメモリ量を取得します。データの読み取り本数が増加するにつれて、phpの使用メモリは徐々に増加していることがわかった。
もしかしてphpがmysqlを調べている時のデータはメモリに存在しますか?検索してみたら、やはりこの意味です。
mysqlのC API関数はmysql_があります。アメリカ.レスリングとmysqlstoreレスリング()
mysqlstorereult()は結果集をmysql Serverからクライアントに読み、mysql_アメリカ.レスリング()は結果集のメタ情報を読んだだけです。
1、phpのmysql_queryが呼び出したのはmysql_です。storeresult()は、結果集を自動的に取得し、キャッシュします。
2、phpのもう一つの関数mysql_unbuffered_query()は呼び出しのmysql_です。アメリカ.result()は、一方で、大きな結果集を扱う際にはかなりのメモリが節約されます。一方、SQL文全体が実行されるまでは、第1行を取得した直後に結果セットを動作させることができる。
ですから、私たちは大量のデータを読む時、mysqlを使うことができます。unbuffered_query()がmysqlの代わりになります。query()確かにそうです。しかも相当な力があります。すべてのデータメモリを1 MB以内に維持しています。成長したことがありません。
mysqlunbuffered_query()はSQLクエリをMySQLに送信しますが、mysql_とは違っています。query()のように自動的に結果セットを取得してキャッシュします。一方、これは大きな結果セットを扱う時にはかなりのメモリが節約されます。一方、SQL文全体が実行されるまでは、第1行を取得した直後に結果セットを動作させることができる。複数のデータベース接続を使用する場合は、オプションパラメータlink_を指定しなければなりません。identifer
mysqlunbuffered_query()の利点は価格があります。unbuffered_query()が戻った結果集の上ではmysqlを使用できません。numローソンとmysqldata_seek()また、新しいSQLクエリをMySQLに送信する前に、キャッシュされていないすべてのSQLクエリから生成された結果行を抽出しなければならない。
自分の業務に合わせて適切な選択関数を必要とします。
本論文で述べたように、皆さんのphpプログラムの設計に役に立ちます。
一、問題
phpを使ってmysql大データ量を調べた時、プログラムはまだ実行済みでなく、警告が出ます。
Fatal error: Allowed memory size of 100663296 bytes exhausted(tried to allocate 103 bytes)
エラーメッセージ:phpに割り当てられた100 Mメモリが占有されました。
二、解決方法:
最も簡単な解決方法は、実行ファイルのヘッダの増加です。
ini_set('memory_limit','256M');
メモリを256 M以上に増やすと、phpに使用されるメモリの空間を増やすことができます。しかし、今度はもっと多くのデータを読み込むにはどうすればいいですか?
ここでは関数を紹介します。
メモリを使うゲットするusage()メソッドは、phpで使用するメモリ量を取得します。データの読み取り本数が増加するにつれて、phpの使用メモリは徐々に増加していることがわかった。
もしかしてphpがmysqlを調べている時のデータはメモリに存在しますか?検索してみたら、やはりこの意味です。
mysqlのC API関数はmysql_があります。アメリカ.レスリングとmysqlstoreレスリング()
mysqlstorereult()は結果集をmysql Serverからクライアントに読み、mysql_アメリカ.レスリング()は結果集のメタ情報を読んだだけです。
1、phpのmysql_queryが呼び出したのはmysql_です。storeresult()は、結果集を自動的に取得し、キャッシュします。
2、phpのもう一つの関数mysql_unbuffered_query()は呼び出しのmysql_です。アメリカ.result()は、一方で、大きな結果集を扱う際にはかなりのメモリが節約されます。一方、SQL文全体が実行されるまでは、第1行を取得した直後に結果セットを動作させることができる。
ですから、私たちは大量のデータを読む時、mysqlを使うことができます。unbuffered_query()がmysqlの代わりになります。query()確かにそうです。しかも相当な力があります。すべてのデータメモリを1 MB以内に維持しています。成長したことがありません。
mysqlunbuffered_query()はSQLクエリをMySQLに送信しますが、mysql_とは違っています。query()のように自動的に結果セットを取得してキャッシュします。一方、これは大きな結果セットを扱う時にはかなりのメモリが節約されます。一方、SQL文全体が実行されるまでは、第1行を取得した直後に結果セットを動作させることができる。複数のデータベース接続を使用する場合は、オプションパラメータlink_を指定しなければなりません。identifer
mysqlunbuffered_query()の利点は価格があります。unbuffered_query()が戻った結果集の上ではmysqlを使用できません。numローソンとmysqldata_seek()また、新しいSQLクエリをMySQLに送信する前に、キャッシュされていないすべてのSQLクエリから生成された結果行を抽出しなければならない。
自分の業務に合わせて適切な選択関数を必要とします。
本論文で述べたように、皆さんのphpプログラムの設計に役に立ちます。