📚

Amazon RDSでスロークエリを出力し、パフォーマンス改善に繋げる

2023/05/02に公開

背景

  • DBのパフォーマンス低下の懸念があり、スロークエリを出力することで時間のかかっているクエリを特定し、改善に繋げたい

RDSの設定

  1. AWSコンソールからRDSを選択し、該当のDBのダッシュボードに入る

  2. 「設定」から「DB インスタンスパラメータグループ」を選択

  3. パラメータで以下の設定に変更する

    1. slow_query_log1 に設定し、有効化する
    2. long_query_time を確認したい秒数に設定する
  4. スロークエリが有効になっているかを確認する

    SHOW VARIABLES LIKE 'slow_query%'
    
  5. 何秒をスロークエリと判断しているか確認する

    show variables like 'long%';
    
  6. スロークエリの有無を確認する

    SELECT * FROM mysql.slow_log;
    

SlowQueryの原因を確認する

確認環境で上記のスロークエリが格納されているかを確認したところ、複数件スロークエリ情報が格納されていました。

そこで次は原因となっているクエリの特定作業になりますが、 sql_text に問題となったクエリが格納されるため、そこを確認します。

ただし sql_text のデータが BLOB 形式となっており、そのまま確認することができませんでした。

そこで以下のSQLを実行することで、 BLOB を変換し問題のクエリを確認できるようにします。

SELECT *, CONVERT(sql_text USING utf8) AS readable_sql_text FROM mysql.slow_log;

上記のクエリでは、CONVERT()関数を使用して、sql_textカラムのBLOBデータをUTF-8形式のテキストデータに変換しています。

上記のクエリ実行で問題のあるクエリが特定できたら、あとはその原因を個別で調査していきましょう。

参考

Discussion