MySQL Database Service(MDS)の分析クエリを高速化する「HeatWave」の使いどころ
HeatWaveをサンプルデータベースで試す
- 【オラクル先生】
それでは準備ができたので、早速HeatWaveを使ってみましょう! 先ほどMDSに読み込んだサンプルデータを再び使います。前回と同じように、OCIの仮想マシンインスタンスにログインしてMySQLクライアントを起動し、MDSに接続してください。
$ mysql -u <データベースのユーザー名> -p -h <MDSのホスト名>
MySQLのプロンプトが表示されるので、前回で使用したemployeesデータベースを選択します。
mysql> USE employees;
- 【オラクル先生】
今回はHeatWaveを使うので、まず、サンプルデータベースのテーブルにHeatWaveを使うための設定をします。
mysql> ALTER TABLE employees.departments SECONDARY_ENGINE=RAPID; mysql> ALTER TABLE employees.dept_emp SECONDARY_ENGINE=RAPID; mysql> ALTER TABLE employees.dept_manager SECONDARY_ENGINE=RAPID; mysql> ALTER TABLE employees.employees SECONDARY_ENGINE=RAPID; mysql> ALTER TABLE employees.salaries SECONDARY_ENGINE=RAPID; mysql> ALTER TABLE employees.titles SECONDARY_ENGINE=RAPID;
- 【鈴木君】
実行しました! 「RAPID」という実行エンジンを指定しているようですが、これは何ですか?
- 【オラクル先生】
良いところに気がつきましたね。「RAPID」はOracleの研究所でHeatWaveに使われている技術を研究していたときのプロジェクト名なのです。RAPIDの技術がプロダクション化されるときにMySQLが選ばれたのですが、MySQLチームもそれまで知らなかったので、とても驚きました。
- 【鈴木君】
MySQLチームも知らなかったというのは面白いですね!
設定が済んだら、HeatWaveにデータをロードします。
mysql> ALTER TABLE employees.departments SECONDARY_LOAD; mysql> ALTER TABLE employees.dept_emp SECONDARY_LOAD; mysql> ALTER TABLE employees.dept_manager SECONDARY_LOAD; mysql> ALTER TABLE employees.employees SECONDARY_LOAD; mysql> ALTER TABLE employees.salaries SECONDARY_LOAD; mysql> ALTER TABLE employees.titles SECONDARY_LOAD;
- 【鈴木君】
MDSとHeatWaveとで、データは別のところにあるんですね。
- 【オラクル先生】
そうですね。このデータのロードはHeatWaveノードを再起動したときにも再度実行する必要があるので注意しておきましょう。ちなみに、HeatWaveノードへ自動的にデータをロードする仕組みを、現在開発しています。
HeatWaveの準備ができたら、前編と同じSQLクエリを実行してみましょう。
SELECT departments.dept_name,SUM(salaries.salary) AS sum_salaries FROM employees JOIN salaries JOIN dept_emp JOIN departments ON employees.emp_no=salaries.emp_no AND employees.emp_no=dept_emp.emp_no AND dept_emp.dept_no=departments.dept_no GROUP BY departments.dept_name ORDER BY sum_salaries DESC;
- 【鈴木君】
今回の実行時間は、0.34秒でした。
9 rows in set (0.34 sec)
- 【オラクル先生】
前編でHeatWaveを使わずにクエリを実行したときの実行時間は覚えていますか? あのときは2.87秒だったので、約8.4倍、高速化できたということですね。
ここで使用しているサンプルデータベースは、サンプルデータベースの中では比較的大きなデータとはいえ、約120MB程度のデータです。また、SQLもそこまで複雑というわけではありませんが、それでも、処理性能が大きく向上したことがわかります。データ量が増えたり、SQLがより複雑になると、より処理性能が向上する可能性があります。
HeatWaveが使われるかどうかを調べる方法
最後に、オラクル先生が教えてくれた、HeatWave利用のヒントも紹介します。
HeatWaveが使われるSQLかどうかは、SQLに「EXPLAIN」を付けて実行計画を確認することでわかります。HeatWaveが使われる場合は、Extra列に「Using secondary engine RAPID」と表示されます。
また、コメントの形でSQLにオプティマイザヒントを指定することで、HeatWaveを使うかどうか明示的に指定することもできます。
「use_secondary_engine=ON」にした場合はHeatWaveを使いますが、HeatWaveが使えない場合や、HeatWaveを使わないほうが効率的と判断された場合にはMDSで処理します。
SELECT /*+ SET_VAR(use_secondary_engine=ON) */ departments.dept_name,SUM(salaries.salary) <略>
「use_secondary_engine=OFF」にした場合は、HeatWaveを使わないようになります。
SELECT /*+ SET_VAR(use_secondary_engine=OFF) */ departments.dept_name,SUM(salaries.salary) <略>
「use_secondary_engine=FORCED」した場合は、強制的にHeatWaveを使います。そのため、HeatWaveが使えない場合はエラーが発生します。
SELECT /*+ SET_VAR(use_secondary_engine=FORCED) */ departments.dept_name,SUM(salaries.salary) AS sum_salaries <略>
「FORCED」を指定してエラーになったときは、オプティマイザトレースを使うことでエラーになった原因を調べることができます。オプティマイザトレースについては「HeatWave User Guide」の「Debugging Queries」で解説されています。
おわりに
本記事では、前回と今回の2回に渡って、Oracle Cloud上のMySQLのマネージドサービスであるMDSと、MDSの分析クエリを高速化するHeatWaveをお試しで利用する方法を紹介しました。
- 【オラクル先生】
鈴木君、今回MDSとHeatWaveのウェビナーを受講してみて、どうでしたか? 初めてだと、難しく思えた部分もあったかも知れませんね。
- 【鈴木君】
今回初めてOCIのトライアルアカウントに登録してMDSを使ってみましたが、思ったよりも簡単に試せました。設定の操作も分かりやすいと思います! 費用も「え? こんなに安くて良いの?」と思うくらいでした。MySQLはオラクルが開発していて、本物のMySQLが使えるのも、オンプレミスから移行するときなどに不安を減らせますね。さらに、開発元のオラクルがマネージドサービスとしてMDSを管理しサポートしているのも、安心して使える要素だと思います。HeatWaveは、サンプルデータでも10倍近く早くなって驚きました。これが数テラ、数ペタなんて規模になると、その差はさらに大きくなりそうですね。
- 【オラクル先生】
思ったより簡単にできたとのこと、良かったです! MDSもHeatWaveも、データベースベンダーが提供するサービスでサポートも万全というところが大きなメリットですよね。価格的にも大きなアドバンテージがあると思います。ぜひ、鈴木君自身で、もっとさまざまな機能を試してみてください!
* * *
MDSにより、本物のMySQLをマネージドデータベースとして利用できるだけでなく、HeatWaveを使用すれば、そのMySQLから簡単な操作だけで分析クエリを高速化できることがおわかりいただけたと思います。
なお、このページの内容は、OCIチュートリアルページ「その10 – MySQLで高速分析を体験する」でも確認できます。
MDSもHeatWaveも本来は有料サービスであるため、トライアルアカウントで付与されたクレジットを利用してお試しください。30日間有効な300$分のクレジットが無料で付与されたOCIのトライアルアカウントを作成いただき、ぜひこの機会に実際にHeatWaveを体験してみてください。
OCIのトライアルアカウントを30日間有効な500$分のクレジットにアップグレードすることも可能です。詳しくはOCIトライアルアカウント アップグレードに関するお問い合わせまでご連絡ください。