こんにちは!s.tanakaです。
先日こちらの記事でMySQL HeatWaveをご紹介させて頂きました。
今回はHeatWave向けのサービス「MySQL Autopilot」が実装されましたのでご紹介しようと思います!
目次
MySQL Autopilotとは?
「MySQL Autopilot」とは機械学習技術を使用してHeatWaveを自動化し、パフォーマンスを向上させるサービスです。
HeatWaveを利用する際、標準の機能として追加されているため別途使用料金はかかりません。
「MySQL Autopilot」は上図の通り「System setup」、「Data load」、「Query execution」、「Failure handling」の4つの場面に対して、それぞれ以下9つの機能を提供しています。
実際に利用者の手で実行するものは図の上半分「System setup」、「Data load」となり、下半分の「Query execution」、「Failure handling」に対する機能は利用者が意識することなく、Autopilotで自動で対応されるものとなります。
※オラクル社のプレスリリースより引用。更に詳しい内容につきましてはこちらをご参照ください。
System setup
自動プロビジョニング:ワークロードの実行に必要な「HeatWave」ノードの数を、分析処理の対象となるテーブル・データの適応サンプリングによって予測します。
つまり、クラスタの最適サイズをお客様が手作業で予測する必要がなくなります。
この機能を提供するデータベース・サービスは、ほかにありません。
Data load
自動並列ロード:「HeatWave」にロードされる各テーブルの最適な並列度を予測することで、ロード時間とメモリ使用を最適化できます。この機能を提供するクラウド・ベンダーは、ほかにありません。
自動データ配置:クエリーのパフォーマンスが最適になるように、メモリ内でのテーブルをパーティショニング行う際に利用する最適な列予測します。
また、新しい列レコメンデーションによってクエリー・パフォーマンスがどの程度向上するかも予測します。
列を手動で選択する場合、オペレーターのミスによって選択が最適にならない場合があります。
この機能は、このような最適ではない選択によって生じるノード間のデータ移動を最小限に抑えます。
この機能を提供するデータベース・サービスは、ほかにありません。
自動エンコーディング:「HeatWave」に読み込まれるカラムの最適な格納方式を、クエリーを考慮して決定することができます。
この最適な方式により、最高のクエリー性能が得られ、クラスタのサイズを最小にしてコストを抑えることができます。
Query execution
自動クエリー計画改善:クエリー実行からの各種統計情報を学習し、以後のクエリーの実行計画を改善することができます。
これにより、より多くのクエリーが実行されていくと、システムのパフォーマンスが向上します。
この機能を提供するデータベース・サービスは、ほかにありません。
自動クエリー時間予測:クエリーの実行時間を実行前に予測することができます。
クエリーの所要時間の予測が得られるため、お客様は、クエリー時間が長すぎないか、別のクエリーを代わりに実行すべきかを判断することができます。
自動変更伝播:「MySQL Database」内の変更を「HeatWave Scale-out Data Management」のレイヤーに伝播する最適なタイミングをインテリジェントに決定します。
これにより、変更が最適な頻度で伝播されます。
この機能を提供するクラウド・ベンダーは、ほかにありません。
自動スケジューリング:キュー内の実行時間が短いクエリーを特定し、インテリジェントな方法で実行時間が長いクエリーに優先させることで、全体的な待ち時間を短縮します。
他のほとんどのデータベースでスケジューリングに使用されるメカニズムは、ファーストイン・ファーストアウト(FIFO)です。
Failure handling
自動エラー・リカバリ:ソフトウェアまたはハードウェア障害によって1つ以上の「HeatWave」ノードが応答しない場合に、新規ノードをプロビジョニングして必要データを再ロードします。
実際に触ってみる。
MDSの作成
Autopilot機能を触れるにあたり、まずはHeatWaveクラスタを立ち上げましょう。
こちらの記事の「1.MDSの作成」を実施し、HeatWave用のMDSを作成します。
検証準備
今回検証するにあたり、MySQL公式で配布されているこちらのテストデータ(employee data)を使用しました。
ダウンロードしたファイルを解凍後、以下コマンドでインポートしておきます。
mysql -h ホスト名 -u root -p < employees_partitioned_5.1.sql
HeatWave機能の有効化
HeatWaveの機能を有効にしていきます。
1. OCI Webコンソール画面画面から先程作成したMDS画面を表示し、「HeatWave」項目の「有効化」を選択します。
2. ノード数を設定します。「ノード数の見積り」を選択します。
3. HeatWaveを高速化するデータベースおよびテーブルを選択し、「ノード数見積りの適用」を選択します。
上記図の「Auto Provisioning」がこちらに当たります。
機械学習により必要ノード数の精度を高めています。
新しくロード・コマンド欄が追加されています、
ここで表示されているロード・コマンドは後ほど使用するためコピーしておきましょう。
4. 「HeatWaveクラスタの追加」を選択します。
これでHeatWave機能が有効になります。
高速化するテーブルをHeatWaveクラスタへ同期
HeatWave機能の有効後、高速化したいテーブルをHeatWaveクラスタへ同期させます。
ここからはmysqlコマンドでMDSへ接続して実施します。
1. 先程コピーした以下コマンドを実行します。
Autopilotが実装される前はこちらの記事で実施したとおり、HeatWaveクラスタへ同期させるテーブルは一つ一つコマンドを実行し同期させる必要がありました。
Autopilotが実装されたことにより以下のコマンドで一気に同期させることが可能になりました。
CALL sys.heatwave_load(JSON_ARRAY('DB名'), NULL);
2. 実行結果の一部を見てみます。
上記図の「Auto Pallarel Loading」がこちらに当たります。
テーブルをHeatWaveへ同期する際テーブルの容量を自動で判別し、容量が少ないテーブルは少ないスレッド数、容量が多いテーブルはスレッド数を多く振り分け同期速度を早めています。
+-------------------------------------------+
| LOADING TABLE |
+-------------------------------------------+
| TABLE (1 of 6): `employees`.`departments` |
| Commands executed successfully: 3 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 2 |
| Table loaded using 1 thread(s) |
| |
+-------------------------------------------+
7 rows in set (0.28 sec)
+----------------------------------------+
| LOADING TABLE |
+----------------------------------------+
| TABLE (2 of 6): `employees`.`dept_emp` |
| Commands executed successfully: 3 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 4 |
| Table loaded using 2 thread(s) |
| |
+----------------------------------------+
7 rows in set (0.59 sec)
+--------------------------------------------+
| LOADING TABLE |
+--------------------------------------------+
| TABLE (3 of 6): `employees`.`dept_manager` |
| Commands executed successfully: 3 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 4 |
| Table loaded using 1 thread(s) |
| |
+--------------------------------------------+
7 rows in set (0.73 sec)
+-----------------------------------------+
| LOADING TABLE |
+-----------------------------------------+
| TABLE (4 of 6): `employees`.`employees` |
| Commands executed successfully: 3 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 6 |
| Table loaded using 2 thread(s) |
| |
+-----------------------------------------+
7 rows in set (1.01 sec)
+----------------------------------------+
| LOADING TABLE |
+----------------------------------------+
| TABLE (5 of 6): `employees`.`salaries` |
| Commands executed successfully: 3 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 4 |
| Table loaded using 30 thread(s) |
| |
+----------------------------------------+
7 rows in set (1.54 sec)
「Auto Pallarel Loading」機能までを紹介しましたが、「Auto Data Placement」、「Auto Encording」については以下のプロシージャを実行することで利用可能です。
詳しい内容につきましては参考リンクを参照ください。
Auto Parallel Loading
• sys.heatwave_load() プロシージャーを実行
https://dev.mysql.com/doc/heatwave/en/auto-parallel-load.html
Auto Data Placement
• sys.heatwave_advisor() プロシージャーを実行
https://dev.mysql.com/doc/heatwave/en/advisor-data-placement.html
Auto Encording
• sys.heatwave_advisor() プロシージャーを実行
https://dev.mysql.com/doc/heatwave/en/advisor-auto-encoding.html
まとめ
新しく実装されたAutopilot機能に触れてみました。
Autopilotのアドバイザー機能により、HeatWave環境の最適化が可能になりました!
今までのHeatWaveよりさらに性能向上が見込まれ、追加の利用料金もありません。
今後HeatWaveを利用される方は、Autopilot機能を有効に使用していただければと思います!
それでは、最後まで読んで頂きありがとうございました!