クエリの高速化とは
分析処理(AP)シナリオでは、単一のクエリが膨大なデータのスキャン、複雑な集計、結合を必要とすることが多く、クエリ応答時間(RT)とリソース利用率が分析効率とビジネス体験を直接左右します。クエリの高速化とは、オプティマイザー、並列実行、およびターゲットを絞った設定により、分析型SQLをより高速で安定してリソース効率的に実行し、業務SQLを大幅に書き換えることなく、より短い応答時間と予測可能なリソース使用量を実現することです。
クエリの高速化方法
OceanBaseにおけるAPシナリオでのクエリ高速化は、主に以下の2つのアプローチから取り組まれます:
- オプティマイザー側:オプティマイザーが正確で最新の統計情報に基づき、より優れた実行計画(行ストア/カラムストアのパス選択、分散計画、SkipIndexの活用などを含む)を生成することで、大規模テーブルの全スキャンや誤った結合順序による高コストな計画を回避します。
- 実行側:並列クエリ(マルチスレッド/マルチマシン協調)によりCPUとI/Oを最大限活用し、単一クエリのRTを短縮します。適切な並列度(手動DOPまたはAuto DOP)を組み合わせることで、クエリの高速化と同時にリソース競合を制御します。
クエリ高速化の方法は何ですか
このセクションでは、上記の2つのアプローチを中心に、テーブル構造とインデックス設計を踏まえ、実践的な設定とチューニング方法を提供します。関連ドキュメントは以下の通りです:
メソッド |
ドキュメント |
内容の概要 |
|---|---|---|
| テーブル構造とインデックス設計 | APシナリオにおけるデータテーブル設計とクエリ最適化の実践 | ストレージ形式の選択、主キーとパーティション設計、HTAPシナリオでのインデックスの使用方法など、合理的なデータテーブル設計によってAPクエリの高速化の「基盤」をしっかり築き、その後の統計情報と並列設定により良い物理的基盤を提供する方法について説明します。 |
| 統計情報 | 統計情報 | APシナリオにおけるオプティマイザー統計情報の役割、およびテーブルレベル/列レベル統計情報、ヒストグラム、自動収集と手動収集、オンライン収集などのメカニズムについて紹介します。特にAPシナリオの最適化戦略、すなわちメンテナンスウィンドウの設定、超大規模テーブルの統計情報収集戦略(並列度、ヒストグラム、パーティション粒度、サンプリングとロックなど)を詳述し、オプティマイザーがリアルタイムで正確な統計情報を持ち、高品質な実行計画を生成できるようにします。 |
| 並列度(DOP) | クエリの並列度の選択 | 並列クエリ(DOP)の概念、OLTPとOLAPの並列要件の違い、および分散計画と演算子の並列処理について紹介します。手動でのDOP設定またはAuto DOPによる分析クエリの高速化方法を説明し、Auto DOPの有効化方法と重要なパラメータ(例:parallel_min_scan_time_threshold、parallel_degree_limit)の設定推奨事項を提示し、応答時間の向上とリソース制御のバランスを取る方法を示します。 |
上記のドキュメントは、OceanBaseの汎用SQL最適化、分散実行計画、並列実行などの章と併せて参照することで、計画生成、コストモデル、実行の詳細をさらに深く理解することができます。
クエリの高速化を行うタイミング
以下の場合、積極的にクエリ高速化に関する設定とチューニングを行うことを推奨します:
- 大規模テーブルまたはパーティションテーブルの分析:テーブル/パーティションのデータ量が非常に多く、テーブル全体または広範囲のスキャンに時間がかかる場合。正確な統計情報に基づいてカラムストア/行ストアの選択肢やスキャン範囲を決定し、並列度を活用してスループットを向上させ、応答時間を短縮する必要があります。
- 一括インポートまたは大量更新後:データの変更が大きいため、デフォルトの統計情報がまだ更新されていないか、十分に正確でない可能性があり、実行計画が最適でない原因となります。オンライン統計情報収集、メンテナンスウィンドウ、または手動での収集を組み合わせ、必要に応じて並列度を有効にしたり調整したりすることができます。
- 分析クエリの応答時間が要件を満たさない場合:ボトルネックが実行計画または並列リソースにあることが確認された場合、まず統計情報がタイムリーかつ正確であるかを確認し、その後Auto DOPを有効にするか、手動DOPおよび関連パラメータを調整するかどうかを評価することができます。
- 複数のクエリの同時実行によるリソース競合:並列を有効にした後、システム負荷が高すぎる場合。
parallel_degree_limit、parallel_min_scan_time_thresholdなどのパラメータを使用して並列のしきい値と上限を設定するか、リソースグループ/テナントの分離を組み合わせて全体を管理する必要があります。
上記のシナリオに対しては、前述の「クエリ高速化の方法」というセクションにある APシナリオにおけるデータテーブル設計とクエリ最適化の実践、統計情報、クエリ並列度の選択 などのドキュメントを参照し、「まずテーブル構造、次に統計情報と並列度」という順序で段階的に設定とチューニングを行うことで、APシナリオにおいてより優れた実行計画、より短い応答時間、およびより制御可能なリソース使用量を実現できます。
関連ドキュメント
実行計画、コストモデル、並列実行の原理に関する詳細は、OceanBaseの汎用的な SQL最適化、分散実行計画、並列実行などの章を参照してください。