パフォーマンスとチューニング
Apache Doris の適応型オプティマイザと Pipeline 実行エンジンにより、多くのワークロードは特別な調整なしで動作します。ただし、本番環境では通常、体系的なパフォーマンスチューニングが必要です。まずチューニングの進め方に沿ってボトルネックを特定し、次にクエリまたはデータ取り込みの具体的なシナリオに合わせて最適化します。実行計画の解釈が難しい場合は、その背景にある仕組みを理解するために最適化技術の仕組みを参照してください。
チューニングの進め方
クエリ性能
スキーマとインデックスの最適化
テーブルモデル、パーティションとバケットの分割、キーカラムの設計、インデックス(プレフィックスインデックス、BloomFilter、NGram、転置インデックス)の選択によって、クエリ性能の上限が決まります。
マテリアライズドビュー
同期または非同期のマテリアライズドビューで結果を事前計算し、透過的なクエリ書き換えによって既存の SQL を変更せずに高速化します。
Join の最適化
Colocation Join で Shuffle をなくし、オプティマイザの判断が最適でない場合は Distribute Hint と Leading Hint を使用して Join プランを手動で調整します。
キャッシュによる高速化
SQL Cache、Condition Cache、外部テーブルのファイルキャッシュを組み合わせ、繰り返し実行するクエリ間で結果、フィルター計算、リモートデータを再利用します。
実行時のチューニング
Profile に示された実行時のボトルネックに基づき、並列度、RuntimeFilter の待機時間、データスキュー、CBO ルールを調整します。
高い同時実行数とポイントクエリ
行ストアとショートサーキット実行を使用して、Unique Key テーブルに対する高 QPS の主キー検索を実現します。また、ディメンションテーブルとの Join の代わりに辞書テーブルを使用して、KV クエリを高速化します。
Distinct 件数の集計
正確な重複排除には BITMAP を使用します。1%-2% の誤差を許容できる場合は UV の概算に HLL を使用し、メモリとストレージの負荷を大幅に削減します。
クエリ Profile
Profile で Scan、Exchange、Join、集約などのオペレーターの処理時間の内訳を分析し、クエリで最も時間のかかる段階を素早く特定します。
データ取り込み性能
最適化技術の仕組み
クエリオプティマイザ
ルールに基づく等価変換やコストに基づく Join Enumeration など、Nereids オプティマイザのルール書き換えとコストモデルを紹介します。
Pipeline 実行エンジン
Doris の実行レイヤーの基盤となる Pipeline モデル、スケジューリングの仕組み、Morsel-Driven の並列実行を紹介します。
Runtime Filter
Join の build 側で生成した RuntimeFilter を probe 側にプッシュダウンし、無関係なデータをスキップする実行の仕組みを紹介します。
TopN の最適化
ORDER BY ... LIMIT を使う場合に、データの大部分をスキップして TopN を素早く返すショートサーキット実行と部分ソートの最適化を紹介します。
統計情報
コストベースのクエリオプティマイザが実行計画を選ぶ際の基盤となる、テーブル、カラム、ヒストグラムなどの統計情報の収集と利用を紹介します。