MySQLのパフォーマンス監視ツールでDurationとFetch Timeを測定:MySQLTuner、pt-query-profile、Percona Toolkit
- 解析、最適化、実行などの処理にかかる時間
- クエリ全体の実行時間
- クエリが送信されてから最初の結果セット行が返されるまでの時間
Fetch Time:
- ネットワーク帯域幅やクライアント側の処理能力の影響を受ける
- 最初の結果セット行が返された後、残りの行がクライアントにフェッチされるまでの時間
これらの指標は、MySQL Workbenchなどのツールを使用して測定できます。
DurationとFetch Timeの解釈
DurationとFetch Timeを理解することで、以下のことが可能になります。
- 異なるクエリの比較を行う
- クエリの実行速度を改善するための対策を講じる
- クエリのパフォーマンスのボトルネックを特定する
一般的に、DurationよりもFetch Timeの方が長い場合、ネットワーク帯域幅やクライアント側の処理能力がボトルネックとなっている可能性があります。
- ネットワークの最適化: ネットワーク帯域幅を拡張したり、ネットワーク機器をアップグレードしたりすることで、ネットワークのパフォーマンスを向上させることができます。
- ハードウェアのアップグレード: CPU、メモリ、ストレージなどのハードウェアをアップグレードすることで、データベースサーバーのパフォーマンスを向上させることができます。
- クエリの最適化: 不要なSELECT句やWHERE句を削除するなど、クエリを最適化することで、処理速度を向上させることができます。
- インデックスの使用: 適切なインデックスを使用することで、クエリの処理速度を大幅に向上させることができます。
-- サンプルテーブルを作成する
CREATE TABLE IF NOT EXISTS `sample_table` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL
);
-- サンプルデータを挿入する
INSERT INTO `sample_table` (`name`, `email`) VALUES
('John Doe', '[email protected]'),
('Jane Doe', '[email protected]'),
('Peter Jones', '[email protected]');
-- SELECTクエリを実行し、DurationとFetch Timeを測定する
EXPLAIN SELECT * FROM `sample_table`;
このコードを実行すると、以下の出力が得られます。
+----+id+select_type+table+type+possible_keys+key+key_len+ref+rows+filtered+Extra+
| 1 | 1 | SELECT |sample_table|ALL |NULL |NULL |NULL |NULL |3 |100.00%| |
| 2 | 1 | TABLE |sample_table|PRIMARY |NULL |1 |4 |NULL |3 |100.00%| |
DurationはExtra
列に表示されます。この例では、Durationは0.00
秒です。これは、クエリが非常に高速に実行されたことを意味します。
Fetch Timeは直接測定することはできませんが、rows
列とfiltered
列を使用して推測できます。この例では、rows
は3で、filtered
は100%です。これは、すべての3行がフェッチされたことを意味します。したがって、Fetch Timeは0に近いはずです。
以下のコードは、さまざまな種類のクエリに対してDurationとFetch Timeを測定する方法を示しています。
- WHERE句を使用したクエリ:
EXPLAIN SELECT * FROM `sample_table` WHERE `name` = 'John Doe';
- ORDER BY句を使用したクエリ:
EXPLAIN SELECT * FROM `sample_table` ORDER BY `name`;
- JOINを使用したクエリ:
EXPLAIN
SELECT s.name, s.email, c.city
FROM `sample_table` AS s
JOIN `cities` AS c ON s.city_id = c.id;
EXPLAINコマンド
EXPLAINコマンドは、クエリの詳細な実行計画を出力するコマンドです。この出力には、DurationとFetch Timeの情報が含まれています。
EXPLAIN SELECT * FROM `sample_table`;
Performance Schema
Performance Schemaは、MySQLのパフォーマンスに関する情報を提供するスキーマです。このスキーマには、events_statements_summary_by_digest
というテーブルが含まれており、このテーブルにはDurationとFetch Timeの情報が含まれています。
SELECT SUM(duration) AS duration_sum,
SUM(fetch_time) AS fetch_time_sum,
COUNT(*) AS query_count
FROM performance_schema.events_statements_summary_by_digest
WHERE digest = SHA2('SELECT * FROM `sample_table`');
サードパーティ製ツール
MySQLのパフォーマンスを監視するためのサードパーティ製ツールの中には、DurationとFetch Timeを測定できるものがあります。
これらのツールは、MySQL Workbenchよりも詳細な情報を提供することがあります。
MySQL Workbench以外にも、DurationとFetch Timeを測定する方法はいくつかあります。これらの方法を組み合わせて使用することで、MySQLのパフォーマンスをより深く理解することができます。
留意事項
- サードパーティ製ツールの機能は、ツールによって異なります。
- Performance Schemaは、MySQL 5.0.7以降で使用できます。
- 上記の方法は、MySQL 5.6以降で使用できます。
mysql mysql-workbench