私は、MySQLのパフォーマンスレポートを使用して、特別な状況下で私の読み書きパフォーマンスのボトルネックとなっているものを見つけようとしています。また、テーブルへの他のクエリに関する古い統計情報がたくさんあります。MySQLのパフォーマンスレポートをリセットするには?
新しいパフォーマンスを得るために、すべてのパフォーマンスデータをクリアしたいと思います。
Clear Event Tables
ボタンは実際には何もクリアしていないようです。
どうすればよいですか?
私は、MySQLのパフォーマンスレポートを使用して、特別な状況下で私の読み書きパフォーマンスのボトルネックとなっているものを見つけようとしています。また、テーブルへの他のクエリに関する古い統計情報がたくさんあります。MySQLのパフォーマンスレポートをリセットするには?
新しいパフォーマンスを得るために、すべてのパフォーマンスデータをクリアしたいと思います。
Clear Event Tables
ボタンは実際には何もクリアしていないようです。
どうすればよいですか?
(尋ねたように、これは質問に答えていません。その代わり、それは「どのように私は、クエリのパフォーマンスを向上させるか」のより広範な問題に対処しています。)
ここでも速いため、有益な指標を取得するためのシンプルな志向の方法ですクエリ:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
数値は、テーブルサイズまたは結果セットのサイズと一致する場合があります。これらは、テーブルスキャンと、結果セットの何らかのアクション(ソートなど)の良い指標です。
テーブルスキャンは、インデックスが使用されていない可能性があることを意味します。なぜメトリクスがおそらくあなたに伝えることができないものなのかを理解する。しかし、ときどきそれを見つける方法があります:
EXPLAIN FORMAT=JSON SELECT ...
これは、(新しいバージョンで)さまざまなオプションの "コスト"を提供します。このは、1つのインデックスが別のインデックスよりも使用される理由を理解するのに役立ちます。
optimizer_trace
は別のツールです。
しかし、あなたが持っていないINDEX(a,b)
は、あなたが持っているINDEX(a)
よりも優れているという手がかりは何もありません。そしてそれはmy index cookbookの主なポイントの1つです。
数字から推測が困難な別の例です。 MySQLを搭載したプロダクションサーバがCPUの100%を噛み砕いていました。遅いログは、多くの作業が行われていた単純なSELECT
を指していました。
WHERE indexed_column >= '2011-11-11'
AND indexed_column < '2011-11-11' + INTERVAL 1 DAY
テーブルは完全にRAMにキャッシュされた:それは、単なる2%にCPUを落とし
WHERE DATE(indexed_column) = '2011-11-11'
チェンジングを持っていました。 (高いCPU、低いI/O)。クエリはフルテーブルスキャンを実行し、DATE
関数を各行のインデックス付き列に適用する必要がありました。コードを変更した後、インデックスはそれがするべきことをしました。
私がこれをやろうとしているのは、私のCPUが2%未満で利用されている、私はドライブI/O(テーブルとキーがRAMにある)がなく、割り当てられたRAMには上限がありません。利用可能なリソースがたくさんありますが、依然としてクエリはそれほど高速ではありません。私が表面から見ることができるものをぶら下げているものがなければなりません。 これは非常に単純なクエリです。ユニークなインデックスに基づいて単一のレコードを検索しようとしています。 –
ネットワークレイテンシとは何ですか?あなたは 'SELECT *'をやっていますか?または特定の列を選択しますか?文字セット変換? –
私の意見:perfレポートを放棄してください。 slowlogをオンにして、多忙なクエリのいくつかを追跡します。 –
@RickJames質問が何であるか知っています。パフォーマンスレポートを使用して、なぜ高速でないのかを判断したいと考えています。 50ms以下のクエリが低速クエリのログに表示されることは非常に疑問です。これらは、DBとテーブルの最適化を整理するために必要な大量のクエリです。 –
'long_query_time = 0'は、50msのクエリを見つけ出し、それらを集約させて、他のクエリよりも多くの負荷がサーバに加わるかどうかを発見します。 –