23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RDSの slow query について

Posted at

何回も忘れては、調べてを繰り返しているので備忘録として残す。

aws rds を使用している際、 default では slow query が出力されないので、別途 parameter group を設定する必要がある。
※ parameter group には、 Apply Type というのがある。
dynamic 即時反映
static 値を変更した後に、DBを再起動しなければ反映されない。

下記の parameter を貪る必要あり。

  • slow_query_log = 1 (defaultだと 0 で無効になっている)
  • log_output = FILE (defaultだと TABLE になっている)
  • long_query_time = 任意の値 0 ~ 31536000

slow_query_log

これを 1 にするということは、 MySQLでは下記に当たる部分。
AWS RDS では、 parameter group で変更することが可能。

my.cnf

# slow queryを有効
slow_query_log = ON

log_output

これが一番面倒くさかった。
default が TABLE になっている為、 slow_query_log = 1 で設定すると、 slow_query は見えるが table に格納される。
下記 SQL で確認可能

SELECT * FROM mysql.slow_log;

が、下記ドキュメントに記載があるが、 24 時間ごとにログテーブルのローテーションが実行されます。 とある。

ログテーブルのローテーションが実行されると、現在のログテーブルがバックアップのログテーブルにコピーされ、現在のログテーブル内にあるエントリは削除されます。バックアップのログテーブルがすでに存在する場合は、現在のログテーブルをバックアップにコピーする前に、削除されます。バックアップのログテーブルは、必要に応じて照会することができます。mysql.general_log テーブルに対するバックアップのログテーブルは、mysql.general_log_backup という名前になります。mysql.slow_log テーブルに対するバックアップのログテーブルは、mysql.slow_log_backup という名前になります。

ので、直近48時間の slow query しか確認できない。
特に TABLE に拘りがなければ、 FILE にするべきだと感じた。

long_query_time

文字通り long_query_time = n
n秒以上かかった query を記録するのみ。

まとめ

この3つの parameter は、セットで設定しておくべきだと感じた。
どこに吐き出すかは、決めれるがいずれにせよ全部残るわけではないので、S3とかに吐き出すようにしたほうが良さそう。
気が向いたら、ココらへんも書きます。
以上

23
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?