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