1. 低速クエリ ログの概念
Explain を使用して SQL ステートメントを分析すると、SQL とインデックスの問題が最適化されます。実際のエンタープライズレベルのプロジェクトの場合、SQL ステートメントは数万に達する場合があるため、それらを 1 つずつ説明して分析することはできません。実行時間が長く、パフォーマンスを消費する SQL はどこで入手できるのでしょうか? ?
スロークエリログを開くことができます:
特定のビジネスと同時実行性に基づいて時間制限 (20 ミリ秒、100 ミリ秒) を見積もり、設定した後にビジネスを開始します。ストレス テストの後、スロー クエリ ログを開くと、実行時間を超過した SQL が表示されます。その後、Explain を使用して、これらの時間のかかる SQL ステートメントを分析します。
手順は次のとおりです:
- スロー クエリ ログ スイッチを開く
slow_query_log
- ビジネスに受け入れられる適切なスロー クエリ時間制限を設定します
- ストレス テストの実行 さまざまなビジネス
- スロー クエリ ログを確認し、実行に時間がかかるすべての SQL ステートメントを確認します
- Explain を使用して、これらの時間のかかる SQL ステートメントを分析し、ターゲットを絞った最適化を行います。
MySQL では、低速なクエリ ログを設定できます。SQL の実行時間が私たちの時間を超えると、設定すると、これらの SQL はスロー クエリ ログに記録され、ログを確認し、Explain を使用してこれらの SQL の実行計画を分析し、効率が低い原因を特定します。インデックスが使用されていないためですか?それともインデックスの作成自体に問題があるのでしょうか?または、インデックスを使用していますが、テーブル内のデータ量が多すぎるため時間がかかります。このとき、テーブルを複数の小さなテーブルに分割するなどの方法があります。
スロークエリログに関連するパラメータは次のとおりです:
(MySQL によって定義された多くのグローバル スイッチはグローバル変数に保存されており、
show/set variables またはグローバル変数の値を設定します)
スロー クエリ ログ スイッチはデフォルトでオフになります
スロー クエリ ログのパス: デフォルトは
/var/lib /mysql/下
スロークエリログには、実行時間がパラメータlong_query_time(単位:秒)で設定した値を超えたすべてのSQL文を含むログが記録され、MySQLのコマンドで表示できます。次のように:
この値は変更できます:
2. 低速クエリ ログの実践
1. スロー クエリ ログ スイッチをオンにする throw_query_log
スロー クエリ ログ スイッチをオンにすると、slow_query_log がグローバル変数であることを示すエラー メッセージが表示されます (また、現在のセッションにのみ影響する変数もあります (long_query_time、profiling など)。変更はすべてのセッション、つまり現在の MySQL サーバーにアクセスしているすべてのクライアントに影響します。
低速クエリ ログ スイッチが正常にオンになりました。
#2. 合理的でビジネス上許容される遅いクエリ時間の上限を設定するlong_query_time
別のセッションを表示
# デフォルト値は依然として 10 秒であることが判明したため、long_query_time は現在のセッションにのみ影響します
3. さまざまなサービスを実行するためのストレス テスト
設定したlong_query_time=0.1秒をすでに超えています
4。スロークエリログを確認してください
パス: /var/lib/mysql/
5. Explain を使用して、これらの時間のかかる SQL ステートメントを分析し、それに応じて最適化します。
## 実行 テーブル全体を検索し、主キー インデックス ツリー全体をスキャンします。
パスワードにインデックスを追加する必要がありますが、型変換が関係する場合、インデックスは使用できないため、パスワードは文字列形式であることに注意してください。
3. 表示するプロファイルを表示するSQL の特定の実行時間
MySQL は通常、小数点第 2 位までの時間のみを表示します
プロファイリング スイッチをオンにすると、より詳細な時間が表示されます
エラーは報告されず、プロファイリング変数が現在のセッションにのみ影響することを示します
以上がMySQL の遅いログ クエリの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。