OracleからMySQL/PerconaServerへの移行は簡単な作業ではありません。特にMySQL8.0の登場により、さらに簡単になりましたが、PerconaはMySQL8.0GA用のPerconaServerを発表しました。 OracleからPerconaServerへの移行を計画する以外に、PerconaServerである必要がある理由の目的と機能を確実に理解する必要があります。
このブログでは、選択する特定のターゲットデータベースとしてOracleからPerconaServerへの移行に焦点を当てます。 Oracle Webサイトには、計画された移行のリファレンスとして使用できるMySQL移行のSQLDeveloper補足情報に関するページがあります。このブログは長いプロセスであるため、移行の全体的なプロセスについては説明しません。ただし、移行プロセスのガイドとして役立つ十分な背景情報が提供されることを願っています。
Percona ServerはMySQLのフォークであるため、MySQLに付属するほとんどすべての機能がPerconaServerに存在します。したがって、ここでのMySQLの参照は、PerconaServerにも適用できます。以前、OracleDatabaseのPostgreSQLへの移行についてブログを書きました。 OracleからPostgreSQLやPerconaServer/ MySQL/MariaDBなどのオープンソースRDBMSへの移行を検討する理由をもう一度繰り返します。
- コスト:ご存知かもしれませんが、Oracleライセンスのコストは非常に高く、パーティション分割や高可用性などの一部の機能には追加のコストがかかります。したがって、全体的には非常に高価です。
- 柔軟なオープンソースライセンスと、AWSなどのパブリッククラウドプロバイダーからの簡単な可用性。
- オープンソースアドオンを利用してパフォーマンスを向上させます。
計画および開発戦略
OracleからPerconaServer8.0への移行は、考慮して対処する必要のある重要な要素がたくさんあるため、苦痛になる可能性があります。たとえば、OracleはWindows Serverマシンで実行できますが、PerconaServerはWindowsをサポートしていません。 Windows用にコンパイルすることはできますが、Percona自体はWindowsをサポートしていません。 Percona ServerはOLAP(オンライン分析処理)またはデータウェアハウスアプリケーション用に設計されていないため、データベースアーキテクチャの要件も特定する必要があります。 Percona Server / MySQL RDBMSは、OLTP(オンライントランザクション処理)に最適です。
データベースアーキテクチャの重要な側面を特定します。たとえば、現在のOracleアーキテクチャがData Guard ++ Oracle RAC(Real Application Cluster)でMAA(Maximum Available Architecture)を実装している場合、PerconaServerでの同等性を判断する必要があります。 MySQL/Perconaサーバー内でこれに対する正解はありません。ただし、同期レプリケーション、非同期レプリケーション(Percona XtraDBクラスターは現在もバージョン5.7.x)、またはグループレプリケーションから選択できます。次に、独自の高可用性ソリューションに実装できる複数の選択肢があります。たとえば、(いくつか例を挙げると)Corosync / Pacemaker / DRBD / Linuxスタックを使用するか、MHA(MySQL High Availability)を使用するか、Keepalived / HaProxy / ProxySQLスタックを使用するか、Keepalived、HaProxy、ProxySQLをサポートするClusterControlに単純に依存します。高可用性ソリューションのためのGarbdとMaxscale。
一方、計画の一環として考慮しなければならない質問は、「Perconaがどのようにサポートを提供し、Percona Server自体にバグが発生した場合に誰がサポートしてくれるのか、またはサポートが必要な場合の緊急度はどれくらいか」です。エンタープライズデータベースからオープンソースRDBMSへの移行の目的がコスト削減のためである場合、同様に考慮すべきことの1つは予算です。
移行計画から、開発戦略の一部として実行する必要があることまで、さまざまなオプションがあります。このようなオプションには、MySQL / Perconaサーバー分野の専門家との交流が含まれます。これには、Severeninesの専門家も含まれます。 OracleからMySQLへの移行には、MySQLサーバー分野での多くの専門知識とノウハウが必要であるため、これを支援できるMySQLコンサルティング会社はたくさんあります。これはデータベースに限定されるべきではありませんが、スケーラビリティ、冗長性、バックアップ、高可用性、セキュリティ、監視/監視可能性、リカバリ、およびミッションクリティカルなシステムへの関与に関する専門知識をカバーする必要があります。全体として、データの機密性を公開することなく、アーキテクチャに関する洞察を理解している必要があります。
評価または予備チェック
構成またはセットアップファイル、カーネルチューニング、自動化スクリプトなどのデータのバックアップは、忘れてはなりません。これは明らかな作業ですが、移行する前に、特に別のプラットフォームに移動する場合は、必ず最初にすべてを保護してください。
また、アプリケーションが最新のソフトウェアエンジニアリング規則に従っていることを評価し、プラットフォームに依存しないことを確認する必要があります。これらのプラクティスは、特にPercona ServerforMySQLなどの別のデータベースプラットフォームに移行する場合に役立ちます。
アプリケーションとデータベースがWindowsServerで実行されており、アプリケーションがWindowsに依存している場合、PerconaServerが必要とするオペレーティングシステムが目立たない可能性があることに注意してください。それならこれは大変な作業になるかもしれません! Percona Serverは別のプラットフォーム上にあることを常に忘れないでください。完全性は保証されない場合がありますが、十分に近い状態で達成できます。
最後に、対象のハードウェアがPerconaのサーバー要件で適切に機能するように設計されていること、または少なくともバグがないことを確認してください(ここを参照)。 Oracleデータベースから確実に移行する前に、まずPerconaServerでストレステストを検討することをお勧めします。
知っておくべきこと
Percona Server / MySQLでは複数のデータベースを作成できますが、OracleにはMySQLと同じ機能がありません。
MySQLでは、物理的に、スキーマはデータベースと同義です。たとえば、 CREATE SCHEMA を使用して、MySQLSQL構文でDATABASEの代わりにキーワードSCHEMAを置き換えることができます。 CREATEDATABASEの代わりに;オラクルにはこれがあります。スキーマは、データベースの一部、つまり1人のユーザーが所有するテーブルやその他のオブジェクトのみを表します。通常、インスタンスとデータベースの間には1対1の関係があります。
たとえば、Oracleで同等のレプリケーション設定(Real Application ClustersやRACなど)では、複数のインスタンスが単一のデータベースにアクセスします。これにより、複数のサーバーでOracleを起動できますが、すべて同じデータにアクセスできます。ただし、MySQLでは、複数のインスタンスから複数のデータベースへのアクセスを許可でき、MySQLノードに複製できるデータベース/スキーマを除外することもできます。
以前のブログの1つを参照すると、インターネット上にある利用可能なツールを使用してデータベースを変換する場合にも同じ原則が適用されます。
OracleデータベースをPerconaServer/ MySQLに100%変換できるようなツールはありません。一部は手作業になります。
移行と論理SQLの結果の検証に関して注意する必要がある事項については、次のセクションを確認してください。
データ型マッピング
MySQL / Percona Serverには、Oracleとほぼ同じですが、Oracleと比較して豊富ではない多くのデータ型があります。ただし、MySQLの5.7.8バージョンが登場して以来、ネイティブJSONデータ型がサポートされています。
以下は、そのデータ型に相当する表現です(表形式の表現はここから取得されます):
Oracle | MySQL | |||
---|---|---|---|---|
1 | BFILE | バイナリファイルへのポインタ、⇐4G | VARCHAR(255) | |
2 | BINARY_FLOAT | 32ビット浮動小数点数 | フロート | |
3 | BINARY_DOUBLE | 64ビット浮動小数点数 | DOUBLE | |
4 | BLOB | バイナリラージオブジェクト、⇐4G | LONGBLOB | |
5 | CHAR(n)、CHARACTER(n) | 固定長文字列、1⇐n⇐255 | CHAR(n)、CHARACTER(n) | |
6 | CHAR(n)、CHARACTER(n) | 固定長文字列、256⇐n⇐2000 | VARCHAR(n) | |
7 | CLOB | キャラクターラージオブジェクト、⇐4G | LONGTEXT | |
8 | 日付 | 日時 | ||
9 | DECIMAL(p、s)、DEC(p、s) | 固定小数点数 | 10進数(p、s)、DEC(p、s) | |
10 | 倍精度 | 浮動小数点数 | 倍精度 | |
11 | FLOAT(p) | 浮動小数点数 | DOUBLE | |
12 | INTEGER、INT | 38桁の整数 | INT | 10進数(38) |
13 | INTERVAL YEAR(p)TO MONTH | 日付間隔 | VARCHAR(30) | |
14 | 間隔日(p)から2番目まで | 曜日と時間の間隔 | VARCHAR(30) | |
15 | 長い | キャラクターデータ、⇐2G | LONGTEXT | |
16 | LONG RAW | バイナリデータ、⇐2G | LONGBLOB | |
17 | NCHAR(n) | 固定長UTF-8文字列、1⇐n⇐255 | NCHAR(n) | |
18 | NCHAR(n) | 固定長UTF-8文字列、256⇐n⇐2000 | NVARCHAR(n) | |
19 | NCHAR VARYING(n) | 可変長UTF-8文字列、1⇐n⇐4000 | NCHAR VARYING(n) | |
20 | NCLOB | 可変長Unicode文字列、⇐4G | NVARCHAR(max) | |
21 | NUMBER(p、0)、NUMBER(p) | 8ビット整数、1 <=p <3 | TINYINT | (0〜255) |
16ビット整数、3 <=p <5 | SMALLINT | |||
32ビット整数、5 <=p <9 | INT | |||
64ビット整数、9 <=p <19 | BIGINT | |||
固定小数点数、19 <=p <=38 | 10進数(p) | |||
22 | NUMBER(p、s) | 固定小数点数、s> 0 | 10進数(p、s) | |
23 | NUMBER、NUMBER(*) | 浮動小数点数 | DOUBLE | |
24 | NUMERIC(p、s) | 固定小数点数 | NUMERIC(p、s) | |
25 | NVARCHAR2(n) | 可変長UTF-8文字列、1⇐n⇐4000 | NVARCHAR(n) | |
26 | RAW(n) | 可変長のバイナリ文字列、1⇐n⇐255 | BINARY(n) | |
27 | RAW(n) | 可変長のバイナリ文字列、256⇐n⇐2000 | VARBINARY(n) | |
28 | 本物 | 浮動小数点数 | DOUBLE | |
29 | ROWID | 物理的な行のアドレス | CHAR(10) | |
30 | SMALLINT | 38桁の整数 | 10進数(38) | |
31 | TIMESTAMP(p) | 分数付きの日付と時刻 | DATETIME(p) | |
32 | TIMESTAMP(p)WITH TIME ZONE | 分数とタイムゾーンを含む日付と時刻 | DATETIME(p) | |
33 | UROWID(n) | 論理行アドレス、1⇐n⇐4000 | VARCHAR(n) | |
34 | VARCHAR(n) | 可変長文字列、1⇐n⇐4000 | VARCHAR(n) | |
35 | VARCHAR2(n) | 可変長文字列、1⇐n⇐4000 | VARCHAR(n) | |
36 | XMLTYPE | XMLデータ | LONGTEXT |
データ型の属性とオプション:
Oracle | MySQL |
BYTEおよびCHAR列サイズのセマンティクス | サイズは常に文字数です |
トランザクション
Percona Serverは、トランザクションデータを処理するためのプライマリストレージエンジンとしてXtraDB(InnoDBの拡張バージョン)を使用します。ただし、TokuDB(非推奨)やMyRocksストレージエンジンなどのトランザクションを処理するための代替選択肢として、さまざまなストレージエンジンを使用できます。
XtraDBでMyRocksを使用または探索することには利点と利点がありますが、XtraDBは、Percona Serverが使用し、デフォルトで有効になっている、より堅牢で事実上のストレージエンジンであるため、このストレージエンジンを移行の基礎として使用します。トランザクションに。
デフォルトでは、Percona Server / MySQLのautocommit変数はONに設定されています。つまり、変更を無視したり、SAVEPOINTを利用したりするために、ROLLBACKを利用するには、トランザクションステートメントを明示的に処理する必要があります。
これは、コミット、ロールバック、およびセーブポイントに関してOracleが使用するのと基本的に同じ概念です。
明示的なトランザクションの場合、これは START TRANSACTION/BEGIN;を使用する必要があることを意味します。
それ以外の場合、自動コミットを無効にする必要がある場合は、データの変更が必要なステートメントに対して常に明示的にコミットする必要があります。
デュアルテーブル
MySQLにはOracleとの二重の互換性があります。これは、ダミーテーブル、つまりDUALを使用したデータベースの互換性を目的としています。
これは、OracleによるDUALの使用に適しているため、DUALを使用するアプリケーション内の既存のステートメントは、PerconaServerへの移行時に変更する必要がない場合があります。
Oracle FROM句はすべてのSELECTステートメントに必須であるため、Oracleデータベースはテーブル名が不要なSELECTステートメントにDUALテーブルを使用します。
MySQLでは、FROM句は必須ではないため、DUALテーブルは必要ありません。ただし、DUALテーブルはOracleの場合とまったく同じようには機能しませんが、Percona Serverの単純なSELECTの場合、これで問題ありません。
以下の例を参照してください:
Oracleでは、
SQL> DESC DUAL;
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
16-FEB-19 04.16.18.910331 AM +08:00
しかし、MySQLの場合:
mysql> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DUAL' at line 1
mysql> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2019-02-15 20:20:28 |
+---------------------+
1 row in set (0.00 sec)
注: DESC DUAL MySQLでは構文が機能せず、MySQLのCURRENT_TIMESTAMP(TIMESTAMPデータ型を使用)にタイムゾーンが含まれていないため、結果も異なります。
SYSDATE
OracleのSYSDATE関数はMySQLでもほとんど同じです。
MySQLは日付と時刻を返し、()を必要とする関数です(引数を必要とせずに閉じ括弧と開き括弧を使用します。これを以下に示すために、SYSDATEの使用に関するOracleとMySQLを示します。
Oracleでは、プレーンSYSDATEを使用すると、時刻なしでその日の日付が返されます。ただし、時刻と日付を取得するには、TO_CHARを使用して日時を目的の形式に変換します。一方、MySQLでは、日付と時刻の両方が返されるため、日付と時刻を取得する必要がない場合があります。
以下の例を参照してください。
Oracleの場合:
SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
02-16-2019 04:39:00
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
16-FEB-19
しかし、MySQLの場合:
mysql> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE() |
+---------------------+
| 2019-02-15 20:37:36 |
+---------------------+
1 row in set (0.00 sec)
日付をフォーマットする場合、MySQLにはDATE_FORMAT()関数があります。
詳細については、MySQLの日付と時刻のドキュメントを確認してください。
TO_DATE
MySQLでのOracleのTO_DATEに相当するのは、STR_TO_DATE()関数です。
Oracleのデータ型とほぼ同じです。DATEデータ型を返しますが、MySQLではDATETIMEデータ型を返します。
オラクル:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL;
NOW
-------------------------
18-FEB-19
MySQL:
mysql> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
+---------------------+
| NOW |
+---------------------+
| 2019-02-18 12:12:12 |
+---------------------+
1 row in set (0.00 sec)
類義語
MySQLでは、OracleのSYNONYMにはそのようなサポートも同等のものもありません。
MySQLで可能な代替案はVIEWを使用することです。
SYNONYMを使用してリモートテーブルのエイリアスを作成できますが、
例:
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
MySQLでは、FEDERATEDストレージエンジンの使用を利用できます。
例:
CREATE TABLE hr_employees (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='mysql://[email protected]_host:9306/federated/test_table';
または、CREATE SERVER構文を使用してプロセスを簡略化すると、リモートテーブルにアクセスするためのSYNONYMとして機能するテーブルを作成するときに簡単になります。詳細については、ドキュメントを参照してください。
空の文字列とNULLの動作
Percona Server / MySQLでは、空の文字列はNULLではないのに対し、Oracleは空の文字列をnull値として扱うことに注意してください。
Oracleの場合:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes
MySQLの場合:
mysql> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No |
+-----------+
1 row in set (0.00 sec)
シーケンス
MySQLでは、OracleがSEQUENCEに対して行うのとまったく同じアプローチはありません。
このアプローチの機能をシミュレートしている投稿がいくつかありますが、テーブルのクラスター化インデックスであるPRIMARY KEYが<<で定義されている限り、LAST_INSERT_ID()を使用して次のキーを取得できる可能性があります。>>
文字列関数
Oracleとは異なり、MySQL / Percona Serverには少数の文字列関数がありますが、データベースに組み込まれている便利な関数はそれほど多くありません。
ここで1つずつ説明するには長すぎますが、MySQLのドキュメントを確認して、これをOracleの文字列関数と比較することができます。
DMLステートメント
Oracleからの挿入/更新/削除ステートメントはMySQLでは一致しています。
OracleのINSERTALL / INSERT FIRST MySQLではサポートされていません。
それ以外の場合は、MySQLクエリを1つずつ記述する必要があります。
例:
Oracleの場合:
SQL> INSERT ALL
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
SELECT * FROM dual;
2 rows created.
2行が作成されました。
ただし、MySQLでは、一度に1つずつ挿入を実行する必要があります。
mysql> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
Query OK, 1 row affected (0.00 sec)
INSERT ALL / INSERT FIRSTは、構文にWHENキーワードを追加することで条件を利用できる、Oracleでの使用方法とは異なります。この場合、MySQL /PerconaServerに同等のオプションはありません。
したがって、これに関する代替ソリューションは、手順を使用することです。
外部結合「+」記号
Oracleでは、+演算子は算術決定にのみ使用されるため、MySQLでは現在のところ左結合と右結合に+演算子を使用することはサポートされていません。
したがって、既存のOracle SQLステートメントに+演算子がある場合は、これをLEFTJOINまたはRIGHTJOINに置き換える必要があります。
MySQLの「外部結合の簡略化」の公式ドキュメントを確認することをお勧めします。
START WITH..CONNECT BY
Oracleは、階層クエリにSTARTWITH..CONNECTBYを使用します。
MySQL / Percona 8.0以降、隣接リストや入れ子集合モデルなどのモデルを使用する階層データ結果の生成がサポートされています。これは、MySQLではCommon Table Expressions(CTE)と呼ばれています。
PostgreSQLと同様に、MySQLは WITH RECURSIVEを使用します 階層クエリの構文なので、 CONNECT BYを翻訳します。 WITH RECURSIVEへのステートメント ステートメント。
ORACLEやMySQL/PerconaServerとの違いについては以下を確認してください。
Oracleの場合:
SELECT cp.id, cp.title, CONCAT(c2.title, ' > ' || cp.title) as path
FROM category cp INNER JOIN category c2
ON cp.parent_id = c2.id
WHERE cp.parent_id IS NOT NULL
START WITH cp.id >= 1
CONNECT BY NOCYCLE PRIOR c2.id=cp.parent_id;
そしてMySQLの場合:
WITH RECURSIVE category_path (id, title, path) AS
(
SELECT id, title, title as path
FROM category
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.title, CONCAT(cp.path, ' > ', c.title)
FROM category_path AS cp JOIN category AS c
ON cp.id = c.parent_id
)
SELECT * FROM category_path
ORDER BY path;
MySQL/PerconaのPL/SQL?
MySQL / Percona RDBMSは、OracleのPL/SQLとは異なるアプローチを採用しています。
MySQLは、ストアドプロシージャまたはストアド関数を使用します。これは、PL/SQLおよびBEGIN..ENDを使用した構文に似ています。 構文。
OracleのPL/SQLは、サーバーにロードされるときに実行前にコンパイルされますが、MySQLは、呼び出されるときにコンパイルされてキャッシュに格納されます。
PL/SQLをMySQLに変換するためのリファレンスガイドとしてこのドキュメントをチェックアウトすることをお勧めします。
移行ツール
移行のデファクトスタンダードとなる可能性のあるツールについて調査しましたが、適切な回答が見つかりませんでした。
しかし、私はsqlinesを見つけました、そしてそれは単純ですが有望に見えます。
私はそれについて深く掘り下げていませんでしたが、このWebサイトには、OracleからMySQL /PerconaServerへの移行に役立ついくつかの洞察があります。 thisやthisなどの有料ツールもあります。
私もgithubを検索しましたが、問題の解決策としてこれほど魅力的なものは見つかりませんでした。したがって、OracleからAmazonへの移行を目的としている場合は、OracleからMySQLへの移行がサポートされているAWSスキーマ変換ツールがあります。
全体として、移行が簡単ではない理由は、主にOracle RDBMSが、Percona Server/MySQLまたはMariaDBRDBMSにはまだない多くの機能を備えた獣であるためです。
とにかく、OracleからMySQL / Percona Serverへの移行に役立ち、有益であると思われるツールを見つけた場合、または知っている場合は、このブログにコメントを残してください!
テスト
移行計画の一環として、テストは非常に重要な役割を果たし、移行に関する決定に影響を与える重要なタスクです。
ツールdbdeployer(MySQL Sandboxのポート)は、利用できる非常に便利なツールです。これは、RDBMSプラットフォームを最初に試してテストすることが目的である場合にスタック全体を設定するのではなく、さまざまなアプローチを試してテストするのが非常に簡単で、時間を節約できます。
SQLストアドルーチン(関数またはプロシージャ)、トリガー、イベントをテストするには、これらのツールmytapまたはGoogleの単体テストフレームワークを使用することをお勧めします。
Perconaは、Webサイトからダウンロードできるツールも多数提供しています。 PerconaToolkitをここでチェックアウトしてください。特にテストや本番使用のタスクでは、ニーズに応じてツールを選択できます。
全体として、MySQLサーバーのテストを行う際のガイドラインとして覚えておく必要があることは次のとおりです。
- インストール後、調整を検討する必要があります。このPerconaブログでヘルプを確認してください。
- 現在のノードの構成セットアップに対して、いくつかのベンチマークとストレス負荷テストを実行します。これを支援できるmysqlslapとsysbenchをチェックアウトしてください。また、ブログ「SysBenchを使用してMySQLとMariaDBのパフォーマンスをベンチマークする方法」も確認してください。
- DDLが正しく定義されているかどうかを確認します。たとえば、データ型、制約、クラスター化インデックスとセカンダリインデックス、またはパーティションがある場合はパーティションなどです。
- 特に構文が正しく、期待どおりにデータを正しく保存している場合は、DMLを確認してください。
- 保存されているルーチン、イベント、トリガーをチェックして、期待どおりの結果が実行/返されるようにします。
- 実行中のクエリが実行可能であることを確認します。オープンソースツールを利用するか、ClusterControl製品を試してみることをお勧めします。特にMySQL/Perconaサーバーの監視/可観測性を提供します。ここでClusterControlを使用して、クエリとそのクエリプランを監視し、パフォーマンスが高いことを確認できます。