遅いWordPressデータベースクエリを見つけて修正するための便利なトリック

公開: 2019-04-17

中程度のSQL照会は、WordPressアプリケーション開発サイトの実行を妨げる可能性があります。 時折、中程度の問い合わせは、不適切に構造化されたSQLの後遺症であり、そのように行われるべきではありませんでした。

さらに、場合によっては、中程度の問い合わせは、実際には、ある時点での迅速な質問でした。ただし、サイトの経験が増えるにつれて、問い合わせはますます遅くなり、拡張データベースを認識し続けることができなくなりました。

SQLが中程度になったにもかかわらず、WordPressアプリケーション開発で問題の質問を見つけて修正するには、いくつかのアプローチを調査する必要があります。 あちこちで特定のWebアプリケーションが必要であり、カスタムの改善を行うための十分なエネルギー、適性、または支出計画がない場合があります。 準備なしで作成することは、いくつかの問題の答えになる可能性がありますが、現在のコードベースから開始するよりも長くかかる可能性があります。 WordPressは当初、ブログの段階として構成されていましたが、そのために傑出した存在であり続けています。 とはいえ、完全に本格的なコンテンツ管理システム(CMS)に進化し、いくつかの目的で、強力なWebアプリケーションを迅速に、カスタムの改善よりも大幅に低い支出計画で作成することもできます。 WordPressは組み込みの開発アプリケーションを提供しますが、Webアプリケーションに使用して、さらに便利にすることができます。 固有のページと投稿の構造は多くのことに利用できますが、カスタム情報とフィールドを含めたり、探したり、質問したり、制御したり、表示したりする必要がある場合は、追加の作業が必要になります。

遅いクエリの検索

中程度の質問の出所を見つけるには、次の2つの段階があります。

  1. どの質問が本当に中程度の質問であるかを見つける。
  2. それらを操作しているプログラムを特定します。

2つのモジュールと1つのSaaSをざっと見て、中程度の問い合わせを発見できるようにする必要があります。

クエリモニター

現在実行中のページに関する情報を利用するには、このモジュールを使用できます。 WordPressの内部アクティビティに関するデータのクラスター全体にもかかわらず、次のポイントごとの内訳が示されます。

  • この要求に応じて、いくつの質問が発生しましたか?
  • ページ上のどの問い合わせに最大の時間がかかりましたか?
  • SQLの質問に最も多くのエネルギーを投資した容量はどれですか?
  • それらの問い合わせがモジュール、主題、またはWordPressセンターからのものであるかどうか

問い合わせ画面は、神経質な赤いコンテンツを含む中程度の質問も認識します。これにより、問題のSQLを非常に簡単に選択できます。

デバッグバー

冷ややかな中程度のSQLを見つけるためのもう1つの驚異的な手段は、古くて信頼できるDebugBarモジュールです。 デバッグバーは、ページが次のようなものでロードされたときのWordPressの内部機能に関する1つのデータを提供します。

  1. WP_Queryのパラメーター
  2. データの要求(調整する改良ルールのカウント)
  3. 現在のページで作成されたSQLの問い合わせ

デバッグバーでSQLフォローを有効にするには、ユーザーはサイトのどこか(wp-config.phpなど)でSAVEQUERIESを許可するように指示する必要があります。

注意:SAVEQUERIESはサイトでの実行に影響を与えるため、おそらく生成サーバーでは使用しないでください。 ただし、前進機では使用できます。

中程度のSQLを見つけることは、デバッグバーでは非常に簡単ではありません。 たとえば、並べ替え可能なテーブルを提供したり、ユーザーに中程度の問い合わせを提供したりすることはありません。 デバッグバーが提供するのは、質問の発信元の方向にユーザーを正確に向けるキャパシティフォローです。

これは、ロードされたドキュメントの概要と、実行中の照会の結果として生じる容量です。 多くの場合、ランダウンの絶対的な継続セクションに熱心です。 これは、適度な質問が実行された場所であり、狩りを開始する場所です。 この質問を促すすべての容量を設定することの便利な点は、SQLが実行された理由についての洞察を明らかにできることです。

NewRelic

NewRelicは、WordPressアプリケーション開発を含むWebアプリケーション開発の実行を測定およびスクリーニングする管理です。 管理者は、サイトの実行に関する大量のデータを提供します。 NewRelicがユーザーにSQL照会の詳細を毎分提供する情報で、方向性をすべて失うことは難しいことではありません。

NewRelicと以前に参照したモジュールの間には、2つの注目すべき対照があります。

  1. NewRelicは、各関数で費やされた時間の正確な計算に至るまで、PHPの実行に関するより多くの洞察を提供します
  2. NewRelicは、見えない場所でサイトへの各要求を追跡するため、後でそれを参照して中程度のSQLを見つけることができます。 モジュールは彼に現在のページを与えるだけです。

NewRelicがサイトの実行に関する一般的なデータを提供する無料のアレンジメントレベルを持っていることが重要ですが、単一の要求をチェックし、適度な問い合わせを見つけるために、ファンシーオッズとエンドの有料アレンジメントに移動する必要があります。

EXPLAINを使用した低速クエリの理解

この時点まで、デバイスは中程度の質問を見つけるために保護されています。 現在、これらの問い合わせがなぜ物事を妨げているのかを知る必要があります。

MySQL EXPLAINウォッチワードは、何が起こっているのかを明確にすることを可能にします。 照会の先頭にEXPLAINを追加すると、MySQLが質問を実行する方法が示されます。 複雑な問い合わせの場合、EXPLAINは、SQLの適度なフォーカス、たとえば、適度なサブクエリや無駄なアクティビティを区別するのに役立ちます。

遅いクエリの修正

クエリが中程度であることが認識され、EXPLAINがユーザーにその理由を明らかにしたので、これらの眠気の問題を修正するために、いくつかの選択肢を検討する必要があります。

オプション1:質問をひねる

[投稿の編集]の画面の速度が非常に遅いという質問があるかもしれません。 問い合わせは、カスタムフィールドのメタボックスの一部でした。

SQLの明確な部分は、ks29so_postmetaテーブルからmeta_keysリストを取得することです。これは、おそらくアンダースコアの記号で始まらないでしょう。 GROUP BYの説明は、各結果が特別であることを意味します。

この問い合わせを複数回実行すると、どの程度の時間がかかるかを次に示します。

1.7145秒

1.7911秒

1.8076秒

1.7707秒

1.8456秒

同様の出力をもたらすクエリを開発するかもしれません。 一種のmeta_keysの1つとして選択する必要があります。 Exceptionalは、特定の同等の単語であり、SQLの説明です。

オプション2:インデックスの追加

ユーザーが設定されたMySQLテーブルでSQL質問を実行している間、テーブル全体を調べて、特定のクエリにとって重要な行がどれであるかを理解する必要があります。 テーブルが大きくなった時点で、そのチェックにはかなりの時間がかかり始めます。

それがMySQLレコードの出番です。リストはテーブル内の情報を取得し、情報を見つけるのがはるかに少なくなるように配置します。 ファイルは、情報を特定の方法で並べ替えることにより、MySQLが各照会に対して実行するフィルタリングの測定を減らすのに役立ちます。

ファイルは、単一のセグメントまたはさまざまなセクションに追加できます。

meta_keyにファイルがある場合、最初のSQL質問時間は次のようになります。

0.0041秒

0.0023秒

0.0030秒

0.0025秒

0.0019秒

これは非常に賢いです。

ファイルに対するアラートの表現:INSERTが列を作成するか、またはUPDATEがafテーブルで使用されるたびに、リストが再決定されます。これは、コストのかかるアクティビティになる可能性があります。 レコードを使用すると、テーブルからの閲覧が速くなりますが、テーブルへの書き込みは遅くなります。 適切に配置されたインデックスリストは非常にうまく機能しますが、データベースに対するリストの一般的な影響を確認せずに、それに取りつかれるべきではありません。

オプション3:クエリ結果をキャッシュする

中程度の質問があることがわかったら。 質問を変更するのではなく、質問の後遺症を片付けるだけのシナリオが考えられます。 そうすれば、照会が実行される頻度を制限し、「フリーパス」を頻繁に取得することになります。

WordPress Transients APIは、クエリを予約する方法の1つです。 過渡現象は、たとえば、コストのかかるタスクの結果を片付けるために使用されます。

  • 外部サイトへのリクエスト(たとえば、進行中のFacebook投稿の取得)
  • 処理の遅い塊(たとえば、通常のアーティキュレーションで巨大な弦を探す)
  • データベースの問い合わせが遅い!
アプローチの選択

いくつかの選択肢が提示されており、この適度な調査を理解するための17の異なるアプローチが存在する可能性があります。 どのアプローチを取るべきですか?

選択肢1(質問の変更)は素晴らしい結果をもたらしました。 ただし、変更された照会は一般に同様の結果をもたらさない可能性を考慮する必要があります。 やや外れた質問で、無意識のうちにコードを壊してしまう可能性があります。

代替案2(記録を含む)は、調査で使用された表とセクションを条件として常に考えられるわけではありません。 WordPressアプリケーション開発センターのテーブルのために、レコードの他の効果を強調する必要があります。

  • センターリフレッシュルーチンは追加のリストを期待していますか?
  • ファイルを含めると、INSERTやUPDATEと同様に、さまざまな問い合わせが緩和されますか?

代替案3(ホームレスの人々によって結果を予約する)の効果はわずかです。ユーザーは最初の問い合わせを変更する必要はなく、データベース構造を調整する必要もありません。

通常、人々はオプション3を選択します。特定のケースでは、修正する質問またはSQLの問題がある特定のサイトに応じて、別の選択肢を選択する場合があります。 確かに、ほとんどの実行の問題に対する1つの対策ですべてに対応できるわけではないため、1つは他の決定とは異なることが許可されます。または、3つすべてをすぐに試すことができます。

最新情報を入手する

ここで本物の問題をスケッチしました。 CSS-Tricksの[カスタムフィールド]ボックスは、非常に中程度のデータベース照会の違反者でした。 同様に、潜在的な取り決めに向けたさまざまな方法をスケッチしました。

真新しいアイデアを思いつく

質問の実行を試みて加速するために取ることができるさまざまな方法論があります。これには、単に質問を微調整したり、リストを含めたりするよりも多くの作業が含まれます。 質問の最も遅い部分の1つは、テーブルを結合してクライアントIDからアイテムIDに移動するために行われる作業であり、クライアントごとにこれを行う必要があります。

すべてのライセンスのクライアントIDとアイテムIDとともに許可情報を格納するテーブルを作成し、特定のクライアントの情報を照会するだけで、情報を非正規化できます。 INSERT / UPDATE / DELETEのMySQLトリガーを使用してテーブルをライセンステーブル(または情報の変更方法に依存する他のテーブル)に変更する必要がありますが、これにより、その情報の質問の実行が大幅に向上します。

したがって、さまざまな結合がMySQLの質問を緩和する場合、照会を少なくとも2つのアーティキュレーションに分割し、PHPでそれらを個別に実行し、その後、コードで結果を収集してチャネル化する方が速い場合があります。