このチュートリアルでは、OB Cloudが提供するリアルタイムSQL診断機能をすぐに体験できます。リアルタイムSQL診断は、可視化された方法でSQL実行プロセス中に実際の実行計画の状態をリアルタイムで照会・表示し、計画内の各演算子の実行時間とリソース使用状況を示します。これにより、SQLパフォーマンスの問題を迅速に調査することができます。
説明
このチュートリアルは、OB Cloudコンソールでもインタラクティブチュートリアルとして公開されています。チュートリアルに従って、実際のOB Cloud環境でインタラクティブに体験することもできます。OB Cloudコンソール にログインした後、左側のナビゲーションバーの 実践チュートリアル をクリックすると、公開されているすべてのインタラクティブチュートリアルを見ることができます。
前提条件
利用可能な分析型インスタンスをお持ちであり、そのインスタンスのデータベースバージョンが4.3.3以上であること。
ご利用のOB Cloudアカウントのロール権限がプロジェクト管理者であること。
背景
分析処理のシナリオでは、SQLクエリが時間を要する場合があり、分単位や時間単位に達することもあります。SQLのパフォーマンス問題は、システムの運用効率に影響を及ぼすだけでなく、開発進捗も遅らせます。特に分散データベースのマルチノード環境では、問題はさらに複雑になります。例えば、分散実行計画の問題が存在するかどうかをどのように判断するか?実行を遅らせているノードをどのように迅速に特定するか?このような問題は、単一マシンのデータベースでは比較的簡単ですが、分散データベースでは複数のリンクとノードが関わるため、問題の特定が困難になります。
OB Cloudが提供するリアルタイムSQL診断機能は、SQL_PLAN_MONITORビューに基づき、各実行演算子の実行状況を収集し、スレッドの実行時間、I/O消費量などの詳細データをリアルタイムで表示することで、ユーザーがSQLパフォーマンスのボトルネックを迅速に特定し解決するのを支援します。
リアルタイムSQL診断機能には、以下の主要な特徴が含まれます:
- 実行が完了したSQL文の分析をサポートするほか、実行中のSQL文に対するリアルタイム分析もサポートします。
- 実行計画のグラフィカルビュー、テーブルビュー、テキストビューを提供し、各演算子の実行順序と接続関係を明確に表示します。
- グローバルビューでは、Top 5の時間を要する演算子を迅速に表示し、SQL文の実行全体の時間を集計して表示するため、パフォーマンスボトルネックを素早く特定できます。
- パラレル実行計画については、DB時間、I/Oメモリ、出力行数でソートできるため、データの偏りなどの問題を迅速に特定でき、分散実行計画の分析もサポートします。
- リアルタイムSQL診断画面は、実行計画と全リンクの診断を提供し、同一ページ上で詳細な実行解析を行うことが容易です。
ステップ1:ワークスペースの作成
OB Cloudコンソールのホームページの左側のナビゲーションペインで、データ開発 > ワークスペース を選択します。
ワークスペース ページで、ワークスペースを作成する をクリックします。
ワークスペースを作成する のポップアップウィンドウで、以下の設定を完了した後、作成する をクリックしてワークスペースの作成を完了します。
構成パラメータ説明ワークスペース名 カスタムのワークスペース名。 関連インスタンス 既存の分析型インスタンスを選択します。 データベースアカウント + 新規アカウント をクリックして、新しいデータベースアカウントを作成し、このワークスペースに関連付けます。 パスワード 作成したばかりのデータベースアカウントのパスワードを入力します。
ステップ2:サンプルデータのインポート
ワークスペース一覧ページで、ステップ1で作成したワークスペース名をクリックし、ワークスペースの詳細ページに移動します。
左側のナビゲーションペインで、サンプルデータセット をクリックし、TPC_H_1G カードを検索してクリックすると、データセットの詳細ページに移動します。
インポート をクリックし、サンプルデータを読み込む のポップアップウィンドウを開きます。
空のデータベースを選択してください のドロップダウンメニューで、データベースを作成 をクリックします。
データベースの作成が完了したら、そのデータベースを選択し、インポート をクリックします。
インポートタスクの完了を待ち、インポートが成功しました のポップアップウィンドウで、ワークシートを開く をクリックし、データ開発ページに進みます。
ステップ3:スローSQLシナリオのシミュレーション
ここでは、典型的な特徴を持つSQLクエリを選択しました。このクエリはTPC-HベンチマークテストのQ20クエリであり、特定の国(例:アルジェリア)において特定の条件を満たすすべてのサプライヤーを検索することを目的としています。このクエリの特徴は、ソート、集計、INサブクエリ、通常のサブクエリを含む2テーブルの結合操作です。これらの複雑なSQL操作は分散データベース環境では一般的であり、SQL実行時間が長くなりやすく、パフォーマンスボトルネックとなる原因となります。
ワークブックのエディターウィンドウに以下の例SQLステートメントを入力します。
-- 指定された国(例:アルジェリア)で特定の条件を満たすサプライヤーを検索する SELECT s_name, -- サプライヤー名 s_address -- サプライヤー住所 FROM supplier, nation WHERE s_suppkey IN ( -- 条件を満たすサプライヤーを検索する SELECT ps_suppkey FROM partsupp WHERE ps_partkey IN ( -- 条件を満たす部品を検索する SELECT p_partkey FROM part WHERE p_name LIKE 'green%' -- 部品名は 'green' で始まる ) AND ps_availqty > ( -- サプライヤーの在庫が特定のしきい値(出荷数の半分)を超える場合 SELECT 0.5 * SUM(l_quantity) FROM lineitem WHERE l_partkey = ps_partkey AND l_suppkey = ps_suppkey AND l_shipdate >= DATE '1993-01-01' -- 出荷日の範囲の開始日 AND l_shipdate < DATE '1993-01-01' + INTERVAL '1' YEAR -- 出荷日の範囲の終了日 ) ) AND s_nationkey = n_nationkey -- サプライヤーの所在国 AND n_name = 'ALGERIA' -- 指定国をアルジェリアとする ORDER BY s_name; -- サプライヤー名でソートする実行 ボタンをクリックしてこのクエリを実行します。このクエリには複数テーブルの結合、ソート、サブクエリなどの操作が含まれており、時間がかかる可能性があります。
ステップ4:スローSQLの分析
クエリの実行が完了したら、行プロフィール ボタンをクリックしてSQL診断ページに進みます。
説明
クエリの実行が遅い場合は、クエリの実行中に結果領域の 実行プロファイルを見る をクリックして、リアルタイムSQL診断ページを開くこともできます。
SQL診断ページで、実行の詳細、実行計画、または エンドツーエンドのトレース診断 タブを選択すると、異なる観点からのSQL実行データを確認できます。
実行の詳細 タブでは、ページ右側の 期間中のトップ5 リストから、実行時間が最も長い演算子を見つけ、その演算子名をクリックすると、その演算子をすばやく特定し、詳細を確認できます。
実行計画図では、演算子下部の青いバーの長さを比較して、最も時間を消費する演算子を特定します。
ステップ5:SQL実行の最適化
SQL診断ページで提供される情報から、lineitem テーブルの全表スキャンがボトルネックであることがわかります。そのため、関連する列にインデックスを作成することにします。
SQL診断ページを閉じてワークブックのエディターページに戻り、新しいエディターウィンドウを開いて、以下のステートメントを実行し、
l_shipdate列にインデックスを作成します。ALTER TABLE lineitem ADD INDEX idx_lineitem_shipdate (l_shipdate);ステップ3で実行したSQLステートメントを再度実行し、実行時間が改善されているか確認します。
クエリのパフォーマンスが依然として期待に達していない場合は、
l_partkey、l_suppkey、l_shipdateに対して複合インデックスを作成してみることができます。ALTER TABLE lineitem ADD INDEX idx_lineitem_partkey_suppkey_shipdate (l_partkey, l_suppkey, l_shipdate);再度ステップ3のクエリを実行し、Hash JoinがNested-Loop Joinに最適化され、実行時間がさらに短縮されているか確認します。