はじめに
OCI の MySQL HeatWave は、1月16日のアップデートで、待望のブラウザベースでGUI操作ができる「MySQL Studio」 が利用可能になりました。
リリースノートはこちらになります。
今回は、こちらの MySQL Studio を触ってみた情報を共有したいと思います。
MySQL Studioとは
MySQL Studioは、2025年10月にラスベガスで開催された Oracle AI World 2025 で MySQL AI と合わせて紹介されました。
こちらは、ブラウザから GUI での操作が行える新しいクライアントツールで、以下のようなことができるようになっています。
SQL Explorer and Editor
- SQLの実行
- 実行計画の確認
- 自然言語でSQLを生成して実行
AI Chat
- ドキュメントをアップロードして Vector ストアに格納し、そのドキュメントに対してのチャット
Ask Oracle
- AIによるアシスタント機能で、SQLのロジックを解説したり、修正案の提案や、運用やチューニングの相談
Notebooks
- Jupyter さながらのWebブラウザ上での開発環境の提供
しかしながら、MySQL Studioは、MySQL Enterprise Edition向けの有償オプション「MySQL AI」の構成要素なので、無料で使用できるものではないのですが、この度、OCI で MySQL HeatWave をご使用の方なら誰でも使用できるようになりました。
前提条件
- MySQL Studioは、高可用性DBシステムでは有効にできません。
- MySQL Studioエンドポイントは、インターネットから直接アクセスできないため、VPN接続やネットワーク・ロード・バランサなどを使用してMySQL Studioエンドポイントにアクセスする必要があります。
検証
事前作業
今回は、こちらの手順にて OpenVPN Access Server を使用してVPN接続できるようにしました。
構築
MySQL HeatWave DBシステムの構築手順については、こちら をご確認下さい。
MySQL Studioを構築するにあたり、ポイントがいくつかあります。
- DBシステムのタイプとして、「スタンドアロン」と「高可用性」がありますが、「高可用性」を選択すると、MySQL Studioが使用できません。
-
MySQL StudioのAI機能を使用したい場合は、「HeatWaveクラスタ」を有効化し、かつ「MySQL HeatWave Lakehouse」を有効にする必要があります。
(HeatWaveクラスタのシェイプについても、MySQL HeatWave GenAI の要件に沿って「HeatWave.512GB」を設定するのが良さそうです。デフォルトの「HeatWave.32GB」を選択した場合、AIチャットのレスポンスがタイムアウトで返ってこないという事象がありました。) - MySQL Studioを有効にし、指定したポート番号(デフォルト:8443)は、セキュリティ・リストもしくは、ネットワーク・セキュリティ・グループで通信を許可する必要があります。
-
データベースのバージョンは、最新の「9.6.0」を指定しました。
MySQL HeatWave GenAIが「9.0.0」から、自然言語文からSQLクエリを生成する機能が「9.4.1」からなので、そのバージョン未満では、MySQL Studioのフル機能が使用できない可能性があります。
MySQL HeatWave GenAIを使用するにあたり、必要なポリシーや権限については、以下をご確認下さい。 - HeatWave User Guide / 7.3 MySQL HeatWave GenAI Roles and Privileges
- HeatWave User Guide / 7.5 Authenticate OCI Generative AI Service
ちなみに、インスタンス作成時のMySQL Studioの有効化する場所は、以下のようになります。
インスタンス作成後に有効化したい場合は、コンソールの詳細画面の「ツール」タブから変更が可能です。
ログイン
MySQL Studioの使い方については、以下が公開されているリファレンスとなります。
あまり細かく内容が記載されていないのと、MySQL HeatWave から使用するケースとしては、少し食い違っている内容もあったりするので、注意が必要です。
まずは、MySQL Studioにログインするには、コンソールの詳細画面の「ツール」タブから「MySQL Studio」の「プライベートHTTPS URL」箇所にある「オープン」ボタンをクリックします
ログイン画面が表示されるので、インスタンス作成時に「管理者資格証明の作成」で指定した、ユーザとパスワードでログインします。
ログインすると、以下のような画面が表示されます。
ガイドの表示
トップ画面左上にある「Guides」ボタンをクリックします。
すると、英語ですが使い方に関するガイドが表示されますので、こちらから操作方法を確認することも可能となっています。
SQLの実行
SQLを実行するには、トップ画面の「New SQL」をクリックするか、サイドバーの「SQL」横にある「+」ボタンをクリックします。
すると、以下のような画面が表示されるので、こちらからSQLを実行していきます。
SQLを実行してみると、以下のようになります。
地味に嬉しい機能だなと思ったのが、結果の右側の「View Settings」下の「Display」のプルダウンをクリックすると、出力形式として、グラフ形式も選択できます。
「Pie」を選択すると、以下のようになります。X軸とY軸の項目も選択できるので、グラフ化がクリック1つでできてしまうのは、非常に有難いです。
そのまま、画面上にある「View Plan」をクリックすると、実行計画が出力されます。しかも、「EXPLAIN」の結果でなく、「EXPLAIN ANALYZE」の結果であることが嬉しいですね。
また、画面上にある「Explain in Ask」をクリックすると、英語ですが、このSQLがどういう処理を行おうとしているかを解説してくれ、かつ、PythonでこのSQLを実行する実装例等も教えてくれたりします。
まさにAI時代ならではの機能だと感じます。
ただ、英語なので英語アレルギーの方は、ブラウザの翻訳機能を使うか、出力後に「日本語で答えて」と追加して再度実行すると、ある程度まともな日本語で返してくれることもあります。
編集したSQLは、デフォルトで「Untitled SQL」として保存されます。右横の3点リーダーから、タイトルを変更したり、SQLファイルとしてダウンロードすることもできます。
自然言語でのSQLの実行
以下の弊社のブログ記事で紹介した機能もMySQL Studioから実行することができます。
サイドバーの「SQL」の横に並んでいる3つのアイコンのうち、真ん中のアイコンをクリックします。
表示された右側のポップアップで、以下を設定して「Generate」ボタンをクリックします。
実行するSQLの情報が出力されました。
更新系等のSQLで実行結果が、成功かエラーなのかが分かればいいだけであれば、そのまま「Run Query」ボタンをクリックします。
参照系のSQLで、実行結果を確認したい場合は、「Save Query」ボタンをクリックします。
「Save Query」ボタンをクリックすると、SQLの実行画面が表示されるので、そのまま「Run Query」ボタンをクリックすれば、実行結果が確認できます。
GUI上から、簡単に自然言語でSQLを生成して実行できるのは、素晴らしいですね。
但し、必ず正しいSQLが生成されるとは限らないので、正確な情報が欲しい場合には、SQLが正しいか正しくないかを判断できる程度のSQL力が必要かと思います。
SQLに自信がない方は、先程、ご紹介した「Explain in Ask」が大いに役立ちそうで、まさに、こういった用途の為に用意されたような気がします。
AI Chat
チャットを行いたい場合は、サイドバーの「Chats」横にある「+」ボタンをクリックします。
表示された画面上部の「Vector Stores」をクリックします。
チャットをする為のソース情報を登録する必要がある為、Vector Stores内の「+」ボタンをクリックします。
画面右側の「Load Document into Vector Store」で、以下のように設定し、「Load」ボタンをクリックします。
- Location:取込みドキュメントをオブジェクトストレージのバケットに配置し、事前認証リクエストを発行したURL
- Vector store schema name:「blog」を選択
- Vector store table name:未入力(未入力とした場合、取り込んだテーブル名は自動で割り当てられます。)
ちなみに、取込みドキュメントは、以下の弊社のホームページから「会社概要」をクリックしたページの内容をPDF化したものです。
https://pasona-dataanddesign.com/
※2026年1月に社名が替わりました。
以下のステータスが Completed になるまで待ちます。
Completed になれば、「Vector Stores」のところに、テーブルが作成されているので、チェック状態にします。
これで準備が完了したので、実際にチャットしてみたいと思います。
まずは「どのような事業内容ですか?」としてみました。
以下の通り、取り込んだドキュメントに沿って回答してくれています。
非常に簡単な手順で、ベクトルストアにデータを登録し、RAG化 してくれるので、この機能を目的に MySQL HeatWave を使うという選択肢もあるかもしれません。
Notebooks
次は、ノートブック機能を使ってみたいと思います。
サイドバーの「Notebooks」横にある「+」ボタンをクリックします。
すると、以下のような画面が表示されました。
画面右側にあるプルダウンから、以下が定義できることが分かります。
- Python
- Markdown
- Raw
- SQL
サンプルデータベースである worldデータベース を用いて、国民1人あたりが稼ぐ金額(GNP / 人口)をベースにグラフ化してみました。
コードは以下になります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import ibis import seaborn as sns import matplotlib.pyplot as plt import pandas as pd con = ibis.mysql.connect() con.raw_sql("USE world") t = con.table('country') analysis_df = ( t.filter(t.Population > 0, t.GNP > 0) .mutate(GNP_per_capita = (t.GNP * 1000000) / t.Population) .execute() ) for col in ['GNP', 'GNP_per_capita', 'Population']: analysis_df[col] = pd.to_numeric(analysis_df[col], errors='coerce').astype(float) # 4. 可視化の準備 plt.figure(figsize=(12, 8)) sns.scatterplot( data=analysis_df, x='Population', y='GNP_per_capita', hue='Continent', size='GNP', sizes=(50, 1500), alpha=0.6, palette='viridis' ) # 1人あたりGNP上位3位 と 人口上位3位 を抽出 top_rich = analysis_df.nlargest(3, 'GNP_per_capita') top_pop = analysis_df.nlargest(3, 'Population') # 日本も追加 japan = analysis_df[analysis_df['Name'] == 'Japan'] targets = pd.concat([top_rich, top_pop, japan]).drop_duplicates() for i, row in targets.iterrows(): plt.text( x=row['Population'], y=row['GNP_per_capita'], s=row['Name'], fontsize=11, fontweight='bold', bbox=dict(facecolor='white', alpha=0.5, edgecolor='none', pad=1) ) plt.xscale('log') plt.yscale('log') plt.title('World Economy: Population vs GNP per Capita', fontsize=15) plt.grid(True, which="both", ls="-", alpha=0.2) plt.show() |
実行結果は以下になります。
上に位置している国ほど、国民1人あたりが稼ぐ金額が高いことを示し、1位は「ルクセンブルク」、2位が「スイス」、3位が「バミューダ諸島」となりました。
右に位置している国ほど、人口が多い国で、円の大きさがGNPとなります。
中国とインドが思いの他、下の方になっていることから、サンプルデータベースが、かなり古い情報であることが分かります。
データを簡単に視覚化し、機械学習用途としても、大いに活用しそうです。
Ask Oracle
既に、チャットでSQLの解説をしてくれることを記載しておりますが、本当に色々な質問に回答してくれます。
画面右下の赤色のボタンをクリックし、ポップアップから以下のようにクエリチューニングに関する質問をしてみました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
以下のSQLの実行計画を取得しました。 ``` SELECT `Continent` FROM `world`.`country` GROUP BY `Continent` ORDER BY COUNT(*) DESC LIMIT 1 ``` 結果はこちらになります。 ``` -> Limit: 1 row(s) -> Sort: count(0) DESC, limit input to 1 row(s) per chunk -> Table scan on <temporary> -> Aggregate using temporary table -> Table scan on country (cost=25.7 rows=239) ``` このクエリの問題点と改善案を教えて。 |
結果、テーブルフルスキャンが発生し、Continent列にインデックスを追加するといいという趣旨で回答してくれました。
以下の質問にも、一般論ですが、メモリ割り当てに関するパラメータを何個かピックアップしてくれました。
クエリチューニング用途としてや、運用フェーズでの相談等にも使える優秀なアシスタント機能であると感じます。
まとめ
今回は、OCI の MySQL HeatWave で利用可能になった MySQL Studio を触ってみました。
特に印象的だったのは、以下の点です。
- 自然言語でのSQL生成
SQLに不慣れな方でも、日本語で質問するだけでクエリを生成できる。 - AI Chat
ドキュメントをアップロードするだけで、簡単にRAG環境を構築できる。 - Ask Oracle
SQLの説明や、クエリチューニングや運用に関する相談ができる頼れるAIアシスタント。 - Notebooks
Jupyter のような環境でデータ分析や可視化が手軽に行える。
MySQL HeatWave の使用をご検討中の方、または既にご利用中の方は、ぜひ MySQL Studio を試してみてはいかがでしょうか。





































