RDS Aurora MySQLのPerformance InsightsによるPerformance Schema自動管理はt4g.mediumだけ特殊な動きをするので気をつけろ

言いたいことはタイトルの通り.

まずRDSにはPerformance Ingishtsというものがある.これは今までのRDSのMonitoringに加えて,もっと詳細なクエリ等の情報までが見える分析ツールである.

www.youtube.com

これは AWS RDSによって提供されている機能である

対して,Performance Schemaというのは MySQLで提供されている機能でありMySQLサーバのモニタリングのための機能である. 通常のMySQLサーバであれば,管理者が

[mysqld]
performance_schema=ON

こういう設定を書くことで有効化できる. 名前が似ていてややこしいので,performance_schema と書くことにする.

さて,こいつをAWS RDSでどうやって有効化するのかという話である.

デフォルトではperformance_schemaはPerformance Insightsによって自動管理される

RDS MySQLの設定は,(Cluster|Instance)ParameterGroupによって設定されている. ちなみに,ClusterParameterGroupとInstanceParameterGroupどちらが優先されるかについては以下の記事が詳しい.

dev.classmethod.jp

で,ややこしいのだがParameterGroupをいじってない状態だと,performance_schemaは0 つまり無効化されているように見える.

しかし,こちらのドキュメントでも触れられている通り,performance_schemaの項目がデフォルト値である場合は,Performance Insightsによる自動管理状態になっている.

docs.aws.amazon.com

この場合は,単にPerformance Insightsを有効化してインスタンスを再起動すれば,performance_schemaは有効化される.

dev.classmethod.jp

なお,ここを変更した時点でPerformance Insightsの自動管理から外れるので,1にすると自動管理されなくなるのである.ややこしいわ.

ただしt4g.mediumだけは自動管理対象外になる

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights.EnableMySQL.html#USER_PerfInsights.EnableMySQL.options

Automatic management of the Performance Schema isn't supported for the t4g.medium instance class.

t4gファミリーとかではなく,なぜかt4g.mediumだけ.一部のインスタンスでこのインスタンスタイプを使っているやつだけハマった.

この場合どういう挙動になるのかを書いていく.

まず,このt4g.mediumでperformance_schemaを有効化するためには,ParameterGroupによる手動管理設定が要る.

performance_schema: 1
performance-schema-consumer-events-waits-current: ON
performance-schema-instrument: wait/%=ON
performance_schema_consumer_global_instrumentation: 1
performance_schema_consumer_thread_instrumentation: 1

というようにParameterGroupを設定しておく.

この状態で再起動する……前に確認すべきなのはPerformance Insightsである.

t4g.mediumはPerformance Insightsによるperformance_schema自動管理外になるので,一見無関係に思えるがそうでもなかった

  1. t4g.mediumをPerformance Insights有効にして再起動すると,どう頑張ってもperformance_schemaは無効化される
  2. t4g.mediumでperformance_schemaを有効化するためには,一度Performance Insightsを無効化して再起動する必要がある
  3. Performance Insightsはインスタンスの再起動無しで有効化できるので,これをやったあとに再度Performance Insightsを有効化する必要がある

面倒すぎるだろう. まじでなぜt4g.mediumだけこうなった?smallとかlargeではこうならないんでしょ?

これは勘だけれど,Performance Insightsが有効な時点でperformance_schema自動管理を動かそうとしているんじゃないだろうか.t4g.mediumなので,その判定で除外されて,以降performance_schemaの設定が確認されないまま起動しているように見える.Performance Insightsが無効化されていれば,そこの確認をスキップしてParameterGroupの設定どおりにperformance_schemaを設定しているように見える.

いや,まじでなんでt4g.mediumだけこうなったのか謎すぎるわ. というかperformance_schemaなしでもPerformance Insightsは使えるわけだし,なんでここを自動管理にしたのか意味不明.普通にParameterGroupの設定どおりに起動してくれたほうが全然明示的じゃん.こんな暗黙的な自動管理をやらないでほしい.