既存の Amazon RDS for MySQL DB インスタンスで Performance Insights を有効化しても再起動するまで Performance Schema は有効にならない

DBインスタンスの変更時に表示される「Performance Insights を有効にすると、MySQL Community パフォーマンススキーマが自動的に有効になります。」が気になったので、再起動の発生有無、Performance Schemaの有効化タイミングを調べました。

コンバンハ、千葉(幸)です。

Amazon RDS では、Performance Insights というモニタリング機能があります。DB インスタンスやクラスターの単位で、その機能の有効化/無効化をコントロールできます。

そして、RDS for MySQL と MariaDB、Aurora MySQL では Performance Insights のオプションとして Performance Schema があります。Performance Insights とあわせて Perfomarnce Schema を用いることで、より詳細な情報が取得できます。

Performance Insights と Performance Shema の状態(有効/無効)は独立しています。そして、有効化/無効化の際に DB インスタンスの再起動を必要とするかどうかが異なります。

  • Performance Insights:有効化/無効化の際に再起動を必要としない
  • Performance Schema:有効化/無効化の際に再起動を必要とする

ここで、既存の DB インスタンスで Performance Insights を有効化しようとした際に以下のメッセージが表示されたことが気になりました。

Performance Insights を有効にすると、MySQL Community パフォーマンススキーマが自動的に有効になります。詳細はこちら

Performance_Insights_schema

有効化に再起動を必要とする Performance Schema が「自動的に有効化される」ということは、この変更に伴い再起動が発生してしまうのか?というのが気になりました。

今回はその詳細を調べてみました。

先にまとめ

Performance Insights が無効の DB インスタンスで Performance Insights を有効化しても、再起動は伴わない。その後、再起動を行うまで Performance Schema は有効にならない。

Performance Insights と Performance Schemaの関係

改めて両者の関係を押さえておきましょう。イメージ図は以下です。

Performance Insights と Performance Schema がそれぞれ有効/無効であるかどうかは独立しています。ただし、デフォルトでは Performance Insights が Performance Schema を自動管理しており、その場合、Performance Insights の状態に合わせて Performance Schema を有効/無効にします。

Performance Insights が Performance Schema を自動管理している場合、取得できる情報がより詳細になります。Perfomance Insights の動作について、Performance Schema が自動管理下かどうかによる差分をまとめた表が以下です。

自動管理下である 自動管理下でない
収集する情報 詳細な低レベルのモニタリング情報を収集 待機イベントとSQLごとのメトリクスを収集
アクティブなセッションメトリクスの収集頻度 毎秒 5秒
ボトルネックの特定に…… 使用できる 使用できない

Performance Schema 自動管理下になっているかどうかは、DB インスタンスに適用されているパラメータグループによって判別できます。以下の状態になっている場合、自動管理下にあります。

  • performance_schemaパラメータについて、以下の両方を満たしている
    • 値が0である
    • sourcesystemである

なお、それぞれが有効/無効のいずれの状態であるかの確認手法は以下のとおりです。

  • Performance Insights:マネジメントコンソールなどから確認可能
  • Performance Schema :DB接続した上で、SHOW VARIABLESで確認

今回確認したかったこと

今回確認したかったことは以下です。

Performance Schema Insights2

  • Performance Insights および Performance Schema が無効状態の Amazon RDS for MySQL DB インスタンスがある
  • Performance Insights が Performance Schema を自動管理している
  • DB インスタンスの Performance Insights を有効化した場合、Performance Schema の状態はどうなるのか。そして再起動は発生するのか

この結果は、先ほど述べた通り「再起動は伴わず、再起動するまで Performance Schema は有効にならない」です。その検証の内容を以降記します。

既存の DB インスタンスのPerformance Insights を有効化してみた

1. 作業前の DB インスタンスの状態

Performance Insights が無効の状態である DB インスタンスを用意しました。

  • db.m5.large
  • MySQL 8.0.35
  • シングルDBインスタンス構成
  • DB インスタンスパラメータグループ:default.mysql8.0

RDS_performance_insights

適用されているパラメータグループのperformance_schemaの設定は以下のとおりであり、Performance Schema は Performance Insights の自動管理下にあります。

RDS_parameter_group

この DB インスタンスに接続し、Performance Shcema の状態を確認します。この DB インスタンスでは、Performance Schema が無効であることがわかります。

# (参考)クライアントのバージョンの確認
$ mysql --version
mysql  Ver 15.1 Distrib 10.5.20-MariaDB, for Linux (x86_64) using  EditLine wrapper

# DB インスタンス上の DB への接続
$ mysql -h ホスト名 -u ユーザー名 -p #対話式でパスワードを入力

(中略)

# グローバル変数からPerformance Schema の状態の確認
MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | OFF   |
+--------------------+-------+
1 row in set (0.003 sec)

2. DB インスタンスで Performance Insights の有効化

マネジメントコンソールからDB インスタンスの変更を行います。変更内容の設定画面で「Performance Insights をオンにする」にチェックを入れます。

Performance_Insights_schema

冒頭で記載したとおり、Performance Schema に関する記述が表示されています。

Performance Insights を有効にすると、MySQL Community パフォーマンススキーマが自動的に有効になります。詳細はこちら

変更の確認画面はこのような表示に。ここで再起動の有無を指定するようなことはできず、変更内容に応じて再起動の有無がコントロールされます。(Performance Insights の有効/無効化では再起動が発生しません。)

RDS_Performance_Insights_enable

変更を実施すると、DB インスタンスのステータスがConfiguring-enhanced-monitoring変更中利用可能と遷移しました。

Performance_Insights

DB インスタンスに記録されたイベントはこのような形に。再起動は発生していないことがわかります。(詳細モニタリングや DB パラメータグループに変更は発生していませんが、毎回イベントは記録されるようです。)

RDS_Events

DB に再度接続して Performance Schema の状態を確認すると、引き続き無効化されています。

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | OFF   |
+--------------------+-------+
1 row in set (0.003 sec)

3. DB インスタンスの再起動に伴う Performance Schema の有効化

DB インスタンスの再起動を実施します。

RDS_restart

再起動の完了後、DB に接続して Performance Schema の状態を確認すると、有効化されていました。

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+
1 row in set (0.004 sec)

「Performance Insights が無効の DB インスタンスで Performance Insights を有効化しても、再起動は伴わない。その後、再起動を行うまで Performance Schema は有効にならない。」ということが確認できました。

既存の DB インスタンスの Performance Insights を無効化すると?

せっかくなので、逆の操作を行った際の挙動を確認してみました。

Performance Schema Insights3

先に結論を書いておくと、「Performance Insights が有効の DB インスタンスで Performance Insights を無効しても、再起動は伴わない。その後、再起動を行うまで Performance Schema は無効にならない。」です。

先ほどまで使用してきた DB インスタンスを再度変更し、Performance Insights を無効化します。

RDS_performance_insights_disabled

もちろん再起動は発生しません。

RDS_Events

DB に接続して Performance Schema を確認すると、引き続き有効化されたままです。

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+
1 row in set (0.003 sec)

再起動を実施しました。

RDS_Events

再度 DB に接続して Performance Schema を確認すると、無効化されていました。

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | OFF   |
+--------------------+-------+
1 row in set (0.003 sec)

おまけ:新規作成する DB インスタンスで Perfomance Insights を有効にすると?

DB インスタンスの作成時に Performance Insights を有効化すると、Performance Schema も有効化された状態になっていました。

MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+
1 row in set (0.002 sec)

終わりに

Performance Insights および Performance Schema が無効な状態である DB インスタンスで Performance Insights を有効化した際に再起動は発生するのか、を確認してみました。

ドキュメントでは以下記述があるため再起動は発生しないだろう、という想定はしていたのですが、実際に試してその通りの挙動であったため安心しました。

Performance Schema の再起動による影響

Performance Insights と Performance Schema は、DB インスタンスの再起動の要件が異なります。

  • Performance Schema

    この機能をオンまたはオフにするには、DB インスタンスを再起動する必要があります。

  • Performance Insights

    この機能をオンまたはオフにするために、DB インスタンスを再起動する必要はありません。

Performance Schema が現在有効になっていない場合、DB インスタンスを再起動せずに Performance Insights を有効にすると、Performance Schema は有効になりません。

Amazon RDS for MariaDB または MySQL における Performance Insights の Performance Schema の有効化 - Amazon Relational Database Service

マネジメントコンソールで表示されるPerformance Insights を有効にすると、MySQL Community パフォーマンススキーマが自動的に有効になります。という表記は、「ただし、再起動するまで適用されません」といった追記してくれるとより迷わなくて助かるなと思いました。(ので、フィードバックを送っておきました。)

同じようなことが気になった方の参考になれば幸いです。

以上、 チバユキ (@batchicchi) がお送りしました。

参考