RDSのスロークエリのログテーブルを空にする

RDSのスロークエリのログテーブルを空にする

AWSRDSのスロークエリのログテーブルを空にする

RDS で発生したスロークエリを slow_log テーブルに格納している場合、普通に DELETE や TRUNCATE でデータを消すことはできません。

そこで、AWS が提供しているストアドプロシージャを使うことになるのですが、毎回コマンドを忘れてしまっていたので備忘録です。スロークエリが蓄積されているテーブルを空にするには、MySQL のコンソールから以下を実行します。

mysql> CALL mysql.rds_rotate_slow_log;

RDSのクエリのログテーブルを空にする

ついでに、クエリのログもテーブルへ格納している場合は、以下のストアドを実行します。

mysql> CALL mysql.rds_rotate_general_log;

こちらのログは一見、運用時の障害検知としては不要なログだと思われがちですが、無駄に発行している SQL の検知や、同じクエリを大量に発行していてキャッシュ化できそうなものの検知など、そういった解析に使えます。私は一定時間変動のないキャッシュ化できそうなデータは、Redis に TTL 60 分くらいで登録して運用することが多いです。

slow_logテーブルへのSELECTがスロークエリになる

そもそも、そんなにスロークエリが溜まるのかというと、実際に業務レベルのシステムを取り扱う場合は 0 件のまま推移することはあまり見たことがありません。もちろん、スローログとして記録する閾値にもよりますので、設定が 0.5 秒とか 1 秒とか、シビアになればなるほどクロークエリが出現する可能性は高くなります。

大昔、とある携帯キャリアのマイメニュー登録・削除(まだガラケーだとマイメニューってあるのかな?)で、キャリアのサーバに対する通信のタイムアウトが 6 秒くらいに設けられていたので、それよりも入会や解約処理が遅いと致命的になるってことで、スロークエリの秒数設定の目安を決めていたことを思い出しました。

とりあえず、スローログのテーブルにデータが増えてくると、期間で区切ってレポートする際に、slow_log テーブルに対する SQL がスロークエリになるので、不要になったスロークエリのログは定期的に削除した方が良さそうです。

最終更新日:

関連記事

人気記事

新着情報