web-dev-qa-db-ja.com

MySQLサーバーでスロークエリログなしでスロークエリを特定する

遅いクエリをログに記録せずに遅いクエリをチェックする方法は他にあるのでしょうか。非常にビジーなサーバーで、メモリとI/Oを節約するために多くのログを記録する余裕がないとします。次に、遅いクエリがあるかどうかを確認する他の方法はありますか?クエリのプロファイリングを行うことはできますが、ほとんどの時間とメモリを使用しているクエリを特定するために、正確に何をすればよいかわかりません。

Mysql管理を開始したばかりで、これの処理方法がわからない。どんなガイダンスも高く評価されます。

8
Astha

スロークエリログをまったく有効にしたくない場合は、私に提案があります

pt-query-digest を一定期間使用できます。

私はDBA StackExchangeでこれを数回提案しました

私を見ると Nov 24, 2011 linkpt-query-digest を起動するためにcrontabできるシェルスクリプトを提供しました。

試してみる !!!

5
RolandoMySQLDBA

たとえば、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)

同じクエリを何度も保存しないようにするために、クエリのハッシュを一意のキーとして使用できます。

4
Jehad Keriaki