遅いクエリをログに記録せずに遅いクエリをチェックする方法は他にあるのでしょうか。非常にビジーなサーバーで、メモリとI/Oを節約するために多くのログを記録する余裕がないとします。次に、遅いクエリがあるかどうかを確認する他の方法はありますか?クエリのプロファイリングを行うことはできますが、ほとんどの時間とメモリを使用しているクエリを特定するために、正確に何をすればよいかわかりません。
Mysql管理を開始したばかりで、これの処理方法がわからない。どんなガイダンスも高く評価されます。
スロークエリログをまったく有効にしたくない場合は、私に提案があります
pt-query-digest を一定期間使用できます。
私はDBA StackExchangeでこれを数回提案しました
Nov 24, 2011
: MySQLの一般的なクエリログのパフォーマンスへの影響Apr 24, 2012
: MySQLスループットのピークを調査Jul 26, 2012
: 現在何が実行されていますか?私を見ると Nov 24, 2011
link 、 pt-query-digest を起動するためにcrontabできるシェルスクリプトを提供しました。
たとえば、10秒ごとにステートメントをトリガーするスクリプトのループで、次のステートメントを実行できます。
mysql -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time>10 and command<>"Sleep"'
発行するクエリに応じて、情報をカスタマイズしてカスタマイズできます。
mysql> desc INFORMATION_SCHEMA.PROCESSLIST;
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| ID | bigint(21) unsigned | NO | | 0 | |
| USER | varchar(16) | NO | | | |
| Host | varchar(64) | NO | | | |
| DB | varchar(64) | YES | | NULL | |
| COMMAND | varchar(16) | NO | | | |
| TIME | int(7) | NO | | 0 | |
| STATE | varchar(64) | YES | | NULL | |
| INFO | longtext | YES | | NULL | |
| TIME_MS | bigint(21) | NO | | 0 | |
| ROWS_SENT | bigint(21) unsigned | NO | | 0 | |
| ROWS_EXAMINED | bigint(21) unsigned | NO | | 0 | |
+---------------+---------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
同じクエリを何度も保存しないようにするために、クエリのハッシュを一意のキーとして使用できます。