web-dev-qa-db-ja.com

Laravelでは単純なクエリは遅いが、データベースコンソールでは非常に速い

私は頭がおかしくならないという非常に奇妙な問題を抱えています。私はバックエンドアプリケーションにLaravel=を使用しています。ここでは、適切なインデックスを持つ30kレコードのテーブルで非常に単純なクエリを実行しています。クエリは次のとおりです。

DB::select('select * from Orders where ClientId = ?', [$id])

Laravelアプリケーションから、このクエリは1.2秒間実行されます(Eloquentモデルを使用している場合も同じです)。

    "query" => "select * from Orders where ClientId = ?"
    "bindings" => array:1 [▼
      0 => "44087"
    ]
    "time" => 1015.2

問題は、データベースコンソールまたはPHPMyAdmin内で同じクエリを実行すると、クエリに約20ミリ秒かかることです。

同じデータベース、同じクエリ、同じコンピューター、同じデータベースへの接続を使用しているので、それがどのように可能であるかわかりません。

その理由は何ですか?

6
Zaay

デバッグバーを使用してクエリをデバッグして、所要時間と所要時間を確認します。使用とインストールは非常に簡単です https://github.com/barryvdh/ laravel-debugbar DBの管理に興味があると思います。これも読んでください。アイデアが得られます。

1
user11324665

クエリはphpmyadminで同じ速度にする必要があります。そうでない場合、アプリケーションがクエリの詳細を表示するために説明文を使用しようとしたものは何でもかまいません。

この競合の原因は、例としてMySQL以外の多くの理由が考えられます

PHPスクリプト自体に、読み込みが遅い原因となるいくつかの関数があります。サーバーのerror.logを確認してください。関数にエラーがある可能性があります。

基本的にphpmyadminは、MySQL接続関数でlarvalとは異なる可能性があります。接続で使用されている拡張機能を確認してください。使用しているphpバージョンと互換性がない可能性があり、これがクエリのスローの原因だと思います

私が作ったいくつかのアプリで原因が常にphp関数または接続にあることに気付きました

0
Creative87

これは、ページ出力に表示される内容に関連して、PHPMyAdminによる使用制限が原因であるとほぼ確信しています。

PHPMyAdminページの上部を表示すると、次のようなものが表示されます。

行0〜24を表示しています(合計314、クエリには0.0009秒かかりました)。

クエリに制限を追加しても、同じパフォーマンスが得られます。

0
ICE

ここにはいくつかの問題があります。最初の方法は、laravelの動作です。Laravelは、スクリプト中に実行されるサービスとクラスのみをロードします。これは、PHPは、長時間実行されるプロセスではなく、CGIスクリプトとして実行されることを意図しています。その結果、クエリを実行するだけでなく、接続セットアップステップがタイミングに含まれる場合があります。より「信頼できる」結果を得るには、単純なクエリのタイミングをとる前のクエリ。

その振る舞いには別の側面があります。ジョブランナーのような長時間実行プロセスでは、サービスパラメータを変更しないでください。これにより、望ましくない動作が発生し、パラメーターの変更が他のジョブに波及する可能性があります。たとえば、SMTPログイン機能を提供する場合、メール送信後にメール送信者の認証情報をリセットする必要があります。そうしないと、その機能を使用しないユーザーが、別のユーザーとしてメールを送信するという問題が発生します。これは、ジョブが実行されるたびにサービスがリロードされると考えるからです。これは、HTTPパーツを実行するときの動作です。

次に、制限を使用していません。他のポスターが指摘したように。

0
Dragas
  1. MySQLクエリログを有効にする方法
  2. Phpmyadminを介してクエリを実行します。
  3. MySQLに実際にあるクエリを確認します。
  4. アプリを実行します。
  5. MySQLに実際にあるクエリを確認します。
  6. 遅くなった余分なものを教えてください。
0
gaRex