2021年8月、HeatWave の最新機能として 「MySQL Autopilot」 が発表・リリースされました。
- プレスリリース
Oracle Announces MySQL Autopilot for MySQL HeatWave Service - Oracle Live
Oracle Live: MySQL Database Service—New HeatWave Innovations
運用の自動化と機械学習技術によるパフォーマンスの最適化をもたらす注目の新機能です。
今回の記事では、公開情報やマニュアルを元に MySQL Autopilot について確認してみます。
MySQL Autopilot : 概要
公式リファレンスマニュアル
MySQL :: HeatWave User Guide :: 1.2 MySQL Autopilot
MySQL Autopilot は、HeatWave のサービスライフサイクルにおける以下の4つの局面においてスポットを当て、自動化と最適化を図る仕組みとなっています。
- システムのセットアップ
- データロード
- クエリー実行
- 障害処理
HeatWave の操作や運用にあたって、これまでユーザーやデータベース管理者が複雑な考慮や手順を実行していた部分が、MySQL Autopilot によって改善されることになるでしょう。
特に、ボトルネックや誤りの元になりやすい人的要因の割合を削減される (ないし不要となる) ことが期待できます。
主要機能の紹介
MySQL Autopilot は、上記の4つの各局面に対応する、9つの主要機能の総称となります。
[MySQL Autopilot – Machine Learning Automation for MySQL HeatWave | The Oracle MySQL Blog より引用]
各機能の紹介として、公式マニュアルによる機能説明文(機械翻訳)も付記します。
- システムのセットアップ
データをサンプリングすることにより、ワークロードに必要なHeatWaveノードの数を見積もります。つまり、手動でクラスターサイズを見積もる必要はありません。
- データロード
HeatWaveにロードされる各テーブルの最適な並列度を予測することにより、ロード時間とメモリー使用量を最適化します。
最高のクエリーパフォーマンスを実現するためにテーブルをメモリー内で分割する方法を推奨し、期待されるパフォーマンスの向上を見積もります。
HeatWaveクエリー履歴を分析することにより、HeatWaveにロードされた列の最適な表現を決定します。これにより、クエリーのパフォーマンスが向上し、必要なクラスターサイズが最小化されます。
- クエリー実行
クエリーの実行時間を見積もり、クエリーを実行せずにクエリーがどのように実行されるかを判断できるようにします。ランタイム見積もりは、Advisor QueryInsights機能によって提供され ます。
以前に実行されたクエリーの統計を使用して、将来のクエリー実行プランを改善します。
MySQLDBシステムの変更をHeatWaveストレージレイヤーに伝播する最適な時間をインテリジェントに決定します。
実行時間の短いクエリーを識別し、実行時間の長いクエリーよりもインテリジェントな方法で優先順位を付けて、クエリー実行の全体的な待機時間を短縮します。
- 障害処理
ソフトウェアまたはハードウェアの障害が原因で1つ以上のHeatWaveノードが応答しなくなった場合、新しいHeatWaveノードをプロビジョニングし、HeatWaveストレージレイヤーからデータを再読み込みします。
お伝えしておくべき重要なポイントとしては、上記 9つの機能は HeatWave の標準機能であり、ユーザーは追加コストを支払う必要なくご利用いただけるという点が驚きです。
既にお気付きの方も居られるかと思いますが「自動プロビジョング」は従来から利用できる機能です。
そして「自動並列ロード」については、前々回の弊社技術ブログ記事にて紹介させていただきましたので今回は割愛致します。
HeatWave の Auto ParallelLoad 機能について
Automated / Advisor
Autopilot という名称から、自動操縦・自律駆動型データベースのように思われるかもしれませんが…
具体的には機能群の内訳として以下大きく2つのカテゴリに分けることができます。
- 「稼働中に OCI/HeatWave が自動制御してくれる機能」
- 「蓄積されたクエリー実行履歴やデータの状態を機械学習モデルに基づき分析し最適な改善案を提案する機能」
前者は以下の機能が該当していると言えます。
- 自動変更伝播 (Auto Change Propagation)
- 自動スケジューリング (Auto Scheduling)
- 自動エラーリカバリー (Auto Error Recovery)
- 自動クエリー計画改善 (Auto Query Plan Improvement)
これらの機能は、ユーザーが意識せずとも、HeatWave を使用しているだけでシステムの最適化を享受できるものです。
機能の詳細については、マニュアルの該当ページや Oracle MySQL blog をご一読いただけるとわかりやすいと思います。
なお、「自動変更伝播」と「自動エラーリカバリー」では、今回併せて発表された MySQL Scale out Data Management 機能に関係しているようです。
HeatWave のインメモリーパーティションを OCI オブジェクトストレージ上にも展開することで、データのリロード時間を大幅に短縮するという機能です。
この機能については、また別の機会に確認・紹介などできればと思います。
そして、後者は以下の機能が該当します。
- 自動プロビジョング (Auto Provisioning)
- 自動並列ロード (Auto Parallel Loading)
- 自動エンコーディング (Auto Encoding)
- 自動データ配置 (Auto Data Placement)
- 自動クエリー時間見積もり (Auto Query Time Estimation / Query Insights)
これらは、ユーザーが意図的に活用することで、システムのセットアップやパフォーマンスを継続的に最適化する手助けを行ってくれる機能となります。
記事後半では、これらのうち「自動エンコーディング」「自動データ配置 」「自動クエリー時間見積もり」の3つの機能について掘り下げて行きたいと思います。
最適化提案の機能について
自動エンコーディング (Auto Encoding)
HeatWave は、文字列型のレコードの格納方式として「可変長エンコード(VARLEN)」「辞書エンコード(SORTED)」の2つのタイプをサポートしています。
MySQL :: HeatWave User Guide :: 3.3 Encoding String Columns
適切な文字列型エンコーディングを選択することで、列にアクセスする際のクエリーパフォーマンスが向上します。
ただし、適用されるエンコーディングのタイプによっては、HeatWave の必要メモリー量に影響してきます。
- 可変長エンコーディングには、HeatWaveノードの列値用のスペースが必要です。
- 辞書エンコーディングには、辞書用の MySQLDB システムノード上のスペースが必要です。
データロード時の(特に指定がない場合の)デフォルトでは可変長エンコーディングを適用しますが、場合によっては、これが最適なエンコーディングではない可能性もあります。
本機能は、実行されたクエリーの履歴から、エンコーディングのタイプがどちらの形式が最適かを推定し推奨設定を導出してくれる 、というものです。
なお、「自動並列ロード」機能にもauto_enc
という同一のオプション名の自動エンコーディングオプションが存在します。
こちらは、MySQLノードにディクショナリでエンコードされた列用の十分なメモリーがあるかどうかを確認する機能であり、本機能とは異なります。
自動データ配置 (Auto Data Placement)
HeatWave の主なアーキテクチャのポイントとして、HeatWave クラスタのノード間で大規模なパーティションデータとして扱うことで、各ノードで並列に処理を実行でき、ノード間の適切なスケーラビリティが実現する構造になっています。
HeatWave にロードするテーブルデータをパーティショニングするキー (データ配置キー) として、JOIN
や GROUP BY
のキーカラムとすることで、クエリー実行時に HeatWave ノード間のデータ再分配のコストを回避し、クエリーパフォーマンスの向上につながります。
最適なデータ配置キーを決定するには、クエリーのアクセスパターンやシステムの動作を正確に理解する必要があり、ハードルの高い作業となります。
また、誤ったキーを選択してしまうと、クエリーパフォーマンスの悪化につながる懸念も発生します。
本機能では、機械学習モデルに基づき、テーブルの統計情報や HeatWaveのクエリー履歴を分析して適切なデータ配置キーを推奨提案してくれる というものです。
自動クエリー時間見積もり (Auto Query Time Estimation / Query Insights)
過去実行されたクエリーのランタイムデータを元に、クエリーの実行時間推定を導出する機能 です。
ユーザーは、同一または同様のクエリーを実行する前に、実行にかかるコストを予測するために有益です。
正常に実行完了した際のランタイムデータはもちろんのこと、オプションとして、EXPLAIN で実行されたクエリーや Ctrl+C で中断されたクエリー、実行中にメモリー不足エラーで失敗したクエリーのランタイム推定値を取得することが可能です。
また、特筆すべき点として、推定にあたっては静的な分析モデルを使用しておらず、HeatWave が都度変化する負荷やランタイム統計情報を活用して動的にクエリーコストモデルをチューニングしていくため、本機能で算出される推定クエリー実行時間も、システム上でクエリーが多く実行されるにつれ、改善されていくことになります。
Advisorユーティリティ
上記の3機能は、基本的には HeatWave にロード済みのデータ・実行されたクエリーを元に分析し、改善が可能であれば推奨設定を提案してくれる、という機能になります。
実際には Advisorユーティリティを実行することで、推奨提案内容を確認・取得します。
MySQL :: HeatWave User Guide :: 8 Workload Optimization using Advisor
Advisorユーティリティの実体は、sys スキーマに作成された heatwave_advisor
というストアドプロシージャです。
1 |
mysql> CALL sys.heatwave_advisor (options); |
上述の3機能は、オプションの指定方法により、使い分けることになります。
以下、具体的な実行コマンドの例です。
オプションや実行結果のサンプルなど、詳細はマニュアルの各機能のページに豊富に掲載されていますので、ぜひご一読ください。
※特に下記の Examples に分かりやすく説明されています。
MySQL :: HeatWave User Guide :: 8.4 Advisor Examples
自動エンコーディング
1 2 3 4 5 6 |
-- スキーマ指定なし(HeatWave全体を分析対象とする) mysql> CALL sys.heatwave_advisor(JSON_OBJECT("auto_enc",JSON_OBJECT("mode","recommend"))); -- スキーマ指定あり mysql> CALL sys.heatwave_advisor(JSON_OBJECT("target_schema",JSON_ARRAY("tpch"), "auto_enc",JSON_OBJECT("mode","recommend"))); |
自動データ配置
1 2 3 4 5 |
-- スキーマ指定なし mysql> CALL sys.heatwave_advisor(NULL); -- スキーマ指定あり mysql> CALL sys.heatwave_advisor(JSON_OBJECT("target_schema",JSON_ARRAY("tpch_1024"))); |
クエリーインサイト
1 2 |
-- スキーマ指定なし mysql> CALL sys.heatwave_advisor(JSON_OBJECT("query_insights", TRUE)); |
Advisor レポートテーブル
Advisor ユーティリティを実行した結果は sys.heatwave_advisor_report
テーブルに格納されます。
推奨設定の変更を実施するための DDL が各 Advisor 機能により出力されますので、必要に応じてこのテーブルをクエリーして取得します。
クエリーの仕方については以下のマニュアルページをご覧ください。
MySQL :: HeatWave User Guide :: 8.5 Advisor Report Table
このテーブルは一時テーブルとして作成され、Advisor 実行カレントセッションのみで利用可能です。
よって、セッションを終了したりサーバーがシャットダウンされるとデータが失われることにご注意ください。
取得した DDL コマンドをコピーし、HeatWave に対して実行することで推奨設定の変更を適用します。
Advisor 機能を有効活用するための流れ
公式マニュアルには以下の記載が随所に確認できます。
Note
エンコーディングとデータ配置の両方の推奨事項に対してAdvisorを実行する場合は、最初に自動エンコーディングを実行し、推奨されるエンコーディングを適用してクエリーを再実行してから、自動データ配置を実行することをお勧めします。このシーケンスにより、文字列列エンコーディングを使用してデータ配置パフォーマンスの利点を計算できるため、Advisor内部モデルの精度が向上します。
Autopilot の Advisor 機能を扱う上での HeatWave の推奨としては、以下の流れで活用していただくことになります。
- データロード
- クエリー実行
- 自動エンコーディング Advisor 実行
- 推奨エンコーディングへの変更を適用 (必要に応じて)
- クエリー再実行
- 自動データ配置 Advisor 実行
- 推奨データ配置への変更を適用 (必要に応じて)
- クエリー再実行
- (以降、継続的な改善プロセス)
まとめ
HeatWave の最新機能 MySQL Autopilot についての紹介となりました。
セットアップやパフォーマンスチューニング、データメンテナンスといった、利用するうえで運用コストの高い対応をシステムに任せられるようになり、機械学習モデルによる分析を用いて継続的な改善をユーザーにもたらしてくれる、非常に画期的な自動化機能です。
そして記事中でもお伝えしましたが、これは標準機能ですので 追加コストは不要でご利用できます。
また、他の分析処理を得意とするクラウドサービス (Snowflake, Redshift, Aurora, Synapse, Big Queryなど) に、同等の機能群を備えたサービスはありません。
以前の記事でお伝えしたパフォーマンスやコスト面だけでなく、自動最適化という優位性も備え、進化する HeatWave に今後とも注目です。
ぜひ、HeatWave をご利用いただき MySQL Autopilot を有効活用して頂ければと思います。