遅いSQLクエリを検出する方法は?

これは、MySQLをデータベースとして使用するWebサイトまたはアプリケーションを開発するときに私たち一人一人に起こりました。 パフォーマンスが突然劇的に低下し、なぜこれが起こったのかわかりませんでした。 これは多くの要因(CPU使用率が高い、ディスク容量が不足している、チャネル帯域幅が低い)によって引き起こされる可能性がありますが、必要以上に完了するまでに時間がかかる最適化されていない要求である可能性もあります。

どのクエリが最も長く実行されているかを知るにはどうすればよいですか?
MySQLには、 遅いクエリ記録するための組み込み機能があります。

この機能を有効にするには、次のいずれかのアクションを実行する必要があります。
  1. /etc/my.cnf次の行を追加します。
    log-slow-queries=/tmp/slow_queries.log
    long_query_time=10
  2. 次のパラメーターを指定してmysqldを呼び出します。
    –log-slow-queries[=/tmp/slow_queries.log]

long_query_timeは、クエリがスロークエリログに書き込まれるまでに実行できる最大秒数です。

その他の関連オプション:

–log-slow-admin-statements

OPTIMIZE TABLEANALYZE TABLEALTER TABLEなどの遅い管理ステートメントをログに記録しOPTIMIZE TABLE

–log-queries-not-using-indexes

このオプションを–log-slow-queriesとともに使用すると、インデックスを使用しないクエリは低速クエリに記録されます。

描画
遅いクエリのロギングが正常に有効になっている場合、行「 log_slow_queries 」の「 Value 」列に「 ON 」が表示されます(上の図を参照)。

注:キャッシュされたリクエストは記録されません。 また、テーブルに0または1つのレコードがあるためにインデックスが役に立たないクエリは記録されません。

特定の条件(ログに書き込むとき)でのみ要求がゆっくり実行される状況が発生する場合がありますが、手動で開始すると、要求は正常に実行されます。


ログ分析

MySQLにはmysqldumpslowユーティリティが含まれています。これは、ログデータを要約し、スロークエリが実行される頻度を視覚的に表示するPerlスクリプトです。

——————————–——————————————————

公平に、私は自分自身からいくつかの言葉を追加したいと思います。
これはまだ翻訳であり、独自の記事ではないので、著者が書いたものを可能な限り正確に翻訳しようとしました。
しかし、この小さな記事に興味がある人のために、公式のMySQLマニュアルでこの機能について読むことをお勧めします。
参照:
dev.mysql.com/doc/refman/5.0/en/slow-query-log.html-英語版
www.mysql.ru/docs/man/Slow_query_log.html-ロシア語版
PS:これは、記事でいくつかの誤ったアクションが説明されていることを意味するものではありません。 素敵なボーナス(:

Source: https://habr.com/ru/post/J31072/


All Articles