ログの分析は大きな問題です。レガシ コードがあり、何百、何千ものクエリが実行されている場合、何を改善するか、どこを改善するか、どの程度改善するかで混乱することになります。ある最適化問題について。
最初のステップは、どこが間違っているのかを分析することです。これは、ログを適切に分析することによってのみ達成できます。これがないと、アプリケーションで何が問題になっているのか正確にわからない可能性があります。
では、MySQL ログをどのように分析しますか?
ログの分析は大きな問題です。レガシ コードがあり、何百、何千ものクエリが実行されている場合、何を改善するか、どこを改善するか、どの程度改善するかで混乱することになります。ある最適化問題について。
最初のステップは、どこが間違っているのかを分析することです。これは、ログを適切に分析することによってのみ達成できます。これがないと、アプリケーションで何が問題になっているのか正確にわからない可能性があります。
では、MySQL ログをどのように分析しますか?
1 つのオプション: Percona ツールキット
数か月前にスローログの大規模な分析を行いました..
そして、私はPercona Toolkit
非常に便利だと思います。このツールキットを使用すると、遅いログを簡単に徹底的に分析し、手間をかけずにデータベースを最適化できます。
SLOW LOGS を分析するための便利な関数をいくつか挙げると、次のようになります。
pt-query-digest
MySQL のスロー ログ、一般ログ、およびバイナリ ログからのクエリを分析できます。(バイナリログは最初にテキストに変換する必要があります。 --type を参照してください)。また、tcpdump からの SHOW PROCESSLIST および MySQL プロトコル データも使用できます。デフォルトでは、ツールは、どのクエリが最も遅く、したがって最適化が最も重要であるかをレポートします。--group-by、--filter、--embedded-attributes などのオプションを使用して、より複雑でカスタマイズされたレポートを作成できます。
使用例pt-query-digest slow.log
pt-index-usage
ログからクエリを読み取り、インデックスがどのように使用されているかを分析します。
誰もがこのツールを利用できるわけではありませんが、利用できる場合は非常に役立つはずです。
表名や列名などのキーワードで検索します。
モバイル アプリ、Web アプリケーション、またはデスクトップ アプリケーションを使用しているときに、どのページの読み込みに予想以上の時間がかかっているかがわかります。読み込み時間は、バックグラウンドで実行されるクエリの影響を受けることがよくあります。ただし、これは、データを取得するために非同期呼び出しではなく同期呼び出しを行っている場合のみです。したがって、読み込みが遅いページ/領域がわかれば、読み込み中にそのページで実行されるクエリのリストと、そのページでアクションを実行したために発生するクエリのリストが得られます。クエリがわかれば、使用されているテーブルとフェッチされている列がわかります。
ここで、スロー クエリ ログを検索していて、独自に非常に高い基準を設定し、スロー クエリ時間を 400 ミリ秒に設定している場合、天才でない限り、スロー クエリ ログが読み込まれる可能性があります。したがって、次の簡単なことを行います。
grep 'table_name' /var/lib/mysql/mysql-slow.log
これは、クエリの時間、クエリの日付などを与えないため、すべての重要な質問が未回答のままであるため、解決するよりも多くの問題を引き起こします。したがって、次のようにします。
grep -B 3 'table_name' /var/lib/mysql/mysql-slow.log
-B x は、クエリの前に x 行数を提供します。
実際のクエリの前の 3 行にはクエリの実行に関するすべての情報が含まれているため、これが必要になります。
代替:
grep -A 3 'query_user' /var/lib/mysql/mysql-slow.log
1 日の遅いクエリの数 (時間単位)
grep Time mysql-slow.log | cut -d: -f1,2 | sort -r | uniq -c
ここでの注意: sort -u を使用するか、または sort | を使用できます。uniq -c ただし、uniq が独立して機能しないことを確認してください。並べ替えでパイプした場合にのみ機能します。並べ替えは、uniq の前に行う必要があります。
mysqldumpslow を使用してログを分析する
パフォーマンスの低い上位 10 件のクエリを取得します。
mysqldumpslow -u root -p -s c -t 10
詳細なログ分析を行う必要がある場合は、マシンに ELK スタックをセットアップし、mysql をログ分析セットアップに接続する必要があります。または、MySQL ログの分析に NewRelic を使用できます。