HeatWaveはMySQLをベースとしたOracle Cloud InfrastructureのクラウドデータベースMySQL Database Serviceの分析系の処理を高速化するモジュールです。このHeatWaveはオラクルの研究開発部門であるOracle Labsでの「インメモリのデータ分析の費用対効果を最大化する研究」から生まれています。Oracle Labsでは機械学習に関する研究も数多く行われており、HeatWaveの運用管理を効率化するための仕組みに取り込まれています。
MySQL Autopilot: 機械学習を応用したHeatWaveの運用自動化
MySQL Autopilotと名付けられた仕組みによって、データベース管理者による手動での設定や運用をHeatWaveが自動化します。自動化の裏側では機械学習による学習と判断が広く活用されています。MySQL Autopilotで提供される自動化の機能は以下の通りです。
- 自動プロビジョニング (Auto Provisioning):HeatWaveノードのメモリ上にMySQLサーバーから展開されるデータ量の見積もりを最小のサンプリングになるように自動調整して時間を短縮し、最適なクラスタサイズを予測
- 自動並列ロード (Auto Parallel Loading):MySQLサーバーからHeatWaveノードへのデータロードに最適な並列度をテーブルごとに予測し、ロード時間とメモリ使用を最適化
- 自動データ配置 (Auto Data Placement):連載第5回でご紹介したテーブルをパーティショニングのために利用する列「データ・プレイスメント・キー」を予測
- 自動エンコーディング (Auto Encoding):テーブル内の文字列型のレコードの格納方式をHeatWaveノードに格納するか、MySQLサーバーノードのメモリー上に格納するかについて、実行されたクエリからどちらの形式が最適化を予測し推奨
- 自動クエリー計画改善 (Auto Query Plan Improvement):実行されたSQLからの各種統計情報をHeatWaveノードが学習し、以後のHeatWave内での実行計画を改善
- 自動クエリー時間予測 (Auto Query Time Estimation):クエリの実行時間を実行前に予測し、ユーザーが処理時間の長いクエリを実行するかの判断を支援
- 自動変更伝播 (Atuo Change Propagation):MySQLサーバー内で行われた変更点をHeatWaveノードのスケールアウト・データ管理レイヤーに反映するタイミングを学習結果から決定
- 自動スケジューリング (Auto Scheduling):実行前のクエリについて実行時間が短いものを優先して実行に移すことで、全体的な処理待ちの時間を短縮
- 自動エラーリカバリ (Auto Error Recovery):HeatWaveノードの障害時に自動的にノードとプロビジョニングにして復旧
HeatWaveクラスターの構築とデータロード時に利用できるAutopilotの機能
自動プロビジョニングではサンプリングの割合と想定されたエラー率から最適なバランスを予測します。
自動プロビジョニングによりデータ量の台数を行うと、対象のテーブルをHeatWaveノードにロードするためのコマンドを集約したストアド・プロシージャheatwave_loadがMySQLサーバーノード内のsysスキーマに自動的に作成されます。自動プロビジョニング画面下部にはこのストアド・プロシージャを呼び出すためのコマンドも表示されます。
データロード用のストアド・プロシージャ実行例
mysql> call sys.heatwave_load(JSON_ARRAY('sample'),null);
+------------------------------------------+
| INITIALIZING HEATWAVE AUTO LOAD |
+------------------------------------------+
| Version: 1.12 |
| |
| Load Mode: normal |
| Load Policy: disable_unsupported_columns |
| Output Mode: normal |
| |
+------------------------------------------+
6 rows in set (0.00 sec)
+-----------------------------------------------------------------------------------------+
| OFFLOAD ANALYSIS |
+-----------------------------------------------------------------------------------------+
| Verifying input schemas: 1 |
| User excluded items: 0 |
| |
| SCHEMA OFFLOADABLE OFFLOADABLE SUMMARY OF |
| NAME TABLES COLUMNS ISSUES |
| ------ ----------- ----------- ---------- |
| `sample` 9 88 4 table(s) are not loadable |
| |
| Total offloadable schemas: 1 |
| |
+-----------------------------------------------------------------------------------------+
10 rows in set (0.05 sec)
+-----------------------------------------------------------------------------------------------------------------------------+
| CAPACITY ESTIMATION |
+-----------------------------------------------------------------------------------------------------------------------------+
| Default load pool for tables: TRANSACTIONAL |
| Default encoding for string columns: VARLEN (unless specified in the schema) |
| Estimating memory footprint for 1 schema(s) |
| |
| TOTAL ESTIMATED ESTIMATED TOTAL DICTIONARY VARLEN ESTIMATED |
| SCHEMA OFFLOADABLE HEATWAVE NODE MYSQL NODE STRING ENCODED ENCODED LOAD |
| NAME TABLES FOOTPRINT FOOTPRINT COLUMNS COLUMNS COLUMNS TIME |
| ------ ----------- --------- --------- ------- ---------- ------- --------- |
| `sample` 9 16.07 GiB 36.00 MiB 32 0 32 54.00 s |
| |
| Sufficient MySQL host memory available to load all tables. |
| Sufficient HeatWave cluster memory available to load all tables. |
| |
+-----------------------------------------------------------------------------------------------------------------------------+
13 rows in set (0.06 sec)
+---------------------------------------------------------------------------------------------------------------------------------------+
| EXECUTING LOAD |
+---------------------------------------------------------------------------------------------------------------------------------------+
| HeatWave Load script generated |
| Retrieve load script containing 25 generated DDL command(s) using the query below: |
| SELECT log->>"$.sql" AS "Load Script" FROM sys.heatwave_load_report WHERE type = "sql" ORDER BY id; |
| |
| Adjusting load parallelism dynamically per table |
| Using current parallelism of 16 thread(s) as maximum |
| |
| Using SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
| |
| Proceeding to load 9 tables into HeatWave |
| |
| Applying changes will take approximately 53.33 s |
| |
+---------------------------------------------------------------------------------------------------------------------------------------+
13 rows in set (0.07 sec)
+----------------------------------------+
| LOADING TABLE |
+----------------------------------------+
| TABLE (1 of 9): `sample`.`caseww` |
| Commands executed successfully: 2 of 3 |
| Warnings encountered: 0 |
| Table loaded successfully! |
| Total columns loaded: 19 |
| Table loaded using 8 thread(s) |
| |
+----------------------------------------+
7 rows in set (0.63 sec)
<略>
+-------------------------------------------------------------------------------+
| LOAD SUMMARY |
+-------------------------------------------------------------------------------+
| |
| SCHEMA TABLES TABLES COLUMNS LOAD |
| NAME LOADED FAILED LOADED DURATION |
| ------ ------ ------ ------- -------- |
| `sample` 9 0 88 28.59 s |
| |
+-------------------------------------------------------------------------------+
6 rows in set (28.67 sec)
Query OK, 0 rows affected (28.67 sec)
この仕組みによって第5回にご紹介したようなコマンドを個別に実行する必要がなくなり、作業効率の向上と人為的ミスの抑制につながります。
このスクリプトの中では、自動並列ロードという仕組みによってテーブルごとにデータをロードする処理の並列度を機械学習により最適な値に自動的に調整しています。
HeatWaveにロードされたテーブルのパーティショニング最適化
MySQL Autopilotの自動データ配置アドバイザーでは、MySQLノード上のテーブルをHeatWaveノード群に展開する際に、HeatWave構成に対して「実行されたSQL文」を学習して最適なのパーティション・キーを提案します。同時にキーを変更した際に期待される性能改善、および変更にかかる時間の予測を提示します。
ここでは例えばLINEITEMテーブルのパーティション・キーを下記のように変更することを提案しています。
- 現状:l_orderkey, l_linenumber
- 推奨: l_orderkey
もう一つ変更を推奨されているPARTSUPPテーブルの定義をあわせて変更することで、処理時間として5.29分、29.3%の性能向上が期待できると推測しています。またこの2つのテーブルのパーティショニングを再構成するためには7.63時間かかることも推測されています。定義の変更に必要なDDLを生成するコマンドを最後に表示されています。
特に自動データ配置と自動エンコーディングによる予測を利用して最適なデータ配置を設定すると同時に、内部的に利用される自動クエリー計画改善によってSQLを繰り返し実行していくことで処理性能が改善され、MySQL Autopilotを利用しない場合と比較して大幅な処理時間の短縮が見込めます。
このMySQL AutopilotはHeatWaveの標準機能となり、追加費用などは一切不要です。Autopilotは単に処理時間が短くなるだけではなく、機械学習を活用した予測によって最適化の度合いや最適にかかる時間をあわせて精度高く見積もることができます。
他のクラウドデータベースでは類似した機能さえ提供されていない機械学習を活用した圧倒的に先進的な機構となっており、他社のサービスと比較しても分析処理性能が高く運用効率の良いクラウドデータベースをより安価に利用可能となっています。
次回はHeatWaveノードの扱えるデータ容量を拡張し、再起動や障害からの復旧時のデータロード時間を短縮するMySQL Scale-out Data Managementについて解説します。