2

PHP で関数 mysqli_multi_query (または mysqli_query) が受け取る最大 $query パラメータを決定するにはどうすればよいですか? 「;」で区切られたUPDATE sqlコマンドで構成される大きな文字列を生成するphpプログラムがあります。問題は、その文字列が特定の長さを超えると、mysqli_query が「MySQL server has gone away」のようなエラーを生成することです。その長さは約 1MB のように見えますが、その長さを決して超えないようにするにはどうすればプローブできますか?

スクリプトは、25 程度のフィールドで約 7000 回の更新を実行する必要があります。一度に 1 つの更新を実行すると非常に遅くなることがわかりました。複数の更新を連結すると、はるかに高速に実行されます。

複数のクエリをさらに高速に実行する可能性はありますか?

アドバイスありがとうございます!

4

3 に答える 3

5

MySQLエラーログを確認する必要があります。

マシン(ホスティングなど)にアクセスできない場合は、管理者またはヘルプデスクにそのログを問い合わせることができます。

MySQLは非常に大きなクエリをサポートしています。制限があるかどうかはわかりませんが、ネットワークを使用している場合は、パケットサイズに問題がある可能性があります。

MySQL構成をチェックイン--max_allowed_packetして、より大きなパケットサイズを設定してみてください。デフォルトの構成についてはよくわかりませんが、1MBの値である可能性があり、一度に7000の更新でクエリを取得するには小さすぎる可能性があります。

MySQLは、このようなクエリを処理するためにより多くのRAMを必要とする場合があります。

MySQLを再構成できない場合は、何らかの方法で大きなクエリを小さなクエリに分割する必要があります。

詳細については、これを読むこともできます。

devshed-MySQLサーバーがなくなりました

あなたは尋ねました:

複数のクエリをさらに高速に実行する可能性はありますか?

その質問に対する簡単な答えはありません。クエリ、データベーススキーマなどによって異なります。

データベースエンジンはハードディスクではなくRAMメモリで動作するため、構成ファイルのMySQLキャッシュサイズを増やすと、ほとんどの場合、あまりコンピューティングを行わない大規模な単純な更新に関連して大いに役立ちます。大きなキャッシュを使用すると(データがまだRAMに読み込まれていないため、最初の大きなクエリが遅くなることがありますが、最終的に読み込まれると)、多くの読み取り/書き込み操作を必要とするクエリの動作がはるかに速くなります。

後で追加: データ処理にはphp deserialize()関数が必要だと思いますが、これは純粋なSQLで実装するのは難しいかもしれませんが、PHPで実装する必要があります:)サーバーコンソールにアクセスできる場合は、cron(linux sheduler)ジョブを作成できます。夜間にシェルからPHPスクリプトを呼び出します。

後で追加 コメントで議論した後、私はもう1つのアイデアがあります。phpmyadminからデータベース全体または1つのテーブルのバックアップを作成し、ダウンロードして、自宅のコンピューターにデータを復元できます(Windowsでは、XAMPP、WAMPサーバーを使用できます)。自宅のコンピューターでmysql.exeを実行し、データをローカルで処理できます。

于 2012-10-27T16:42:08.293 に答える
0

for ループを使用して大規模な作業を行い、通常の mysqli_query を使用します。そのように16000以上のクエリを取得しました。php.ini ファイルでもいくつか変更する必要があります。ポスト mb サイズを変更する必要があります。多くの文字を送信する場合は、できるだけ大きくしてください。多くの異なる変数を送信する場合も、var input max を変更する必要があります。PHPのメモリサイズを大きくします。クエリを実行するときは、システム メモリが不足していないことを確認してください。すべてを正しく行うと、20000 を超えるクエリを送信できます。PHP メモリを少なくとも 256MB に設定します。非常に大量のクエリを送信する場合は、タイムアウト時間を 30 および 60 から 200 以上に増やす必要がある場合があります。設定を変更しないと、すべてが true であっても投稿が失敗します。php.ini 設定の制限/最大値を超えた場合、PHP はスクリプト条件を false にします。mysql の設定を 1 つずつ変更する必要はありません。1000 を超えるクエリを挿入または更新すると、時間がかかります。

于 2016-12-31T21:33:13.117 に答える