USER MANUALS


クエリのパフォーマンス最適化

特定の分析ニーズに合わせて Denodo Lakehouse Accelerator エンジンのパフォーマンスを微調整できます。以下の構成プロパティが利用可能で、これらのプロパティをワークロードに応じて調整し、最適な効率と速度を実現できます。これらのプロパティは values.yamlpresto.config セクションで構成可能です。

全般的な最適化のプロパティ

プロパティ名

デフォルト値

説明

enableDynamicFiltering

true

この最適化により、結合条件でフィルタされるデータを読み取らないようにすることで、選択結合が含まれるクエリのパフォーマンスが大幅に向上します。

useHistograms

false

Iceberg テーブルのヒストグラムの統計情報を収集できるようにします。ヒストグラムを使用すると、特にスキューデータにおいて、フィルタ操作後に、より正確な行数の推定が提供されます。この機能はデフォルトでは無効になっています。スキューデータを管理して改善した統計情報を利用する場合に、有効にする必要があります。

joinMaxBroadcastTableSize

615MB

このプロパティは、 AUTOMATIC 結合分散タイプの使用時にブロードキャストできるテーブルの最大推定サイズを制御します。クラスタの同時実行性を向上できるほか、CBO が結合テーブルのサイズを誤推定した場合の不正なプランが防止されます。

optimizedRepartitioning

true

最適化されたパーティション再分割を有効にすると、CPU パフォーマンスが向上します。

partialAggregationStrategy

automatic

automatic 戦略を使用すると、オプティマイザーは集約ごとに判断を行います。たとえば、サイズの削減量がしきい値を下回る場合、部分的な集約を無効にします。

generateDomainFilters

true

述語のプッシュダウン中に列ドメインから述語を推論します。これらの生成された述語により、スキャンされる入力データを大幅に削減でき、その結果、実行コストを削減できます。

httpServerThreadsMax

1000

コーディネーターノードがリクエストを処理するために使用可能なスレッドの最大数を指定します。

maxPendingSplitsPerTask

2000

ノードがすでに分割の合計数の上限に達している場合でも、1 つのクエリの 1 つのステージで各ワーカーノードに対してキューに追加できる、標準の分割の重みを持つ未処理の分割の数。

maxSplitsPerNode

2000

各ノードに対してスケジュールできる分割の数を制限します。この値を増やすと、クラスタで処理できるクエリの数が増えるか、データスキューに関係する問題の発生が抑えられます。極端に大きい値にすると、コンテキストスイッチや、クラスタメタデータ用のメモリの予約が増えるため、パフォーマンスが低下するおそれがあります。

minScheduleSplitBatchSize

2000

バッチあたりのスケジュールで考慮する分割の最小数を指定します。

sinkMaxBufferSize

1GB

ネットワークの遅延が大きい場合や、クラスタ内にノードが多数ある場合、この値を増やすと、ステージ間で転送されるデータのネットワークスループットが向上することがあります。

enableEventLoop

true

この機能を使用すると、大量のタスクを実行する場合にコーディネーターの効率が向上します。

joinMaxBroadcastTableSize

true

このプロパティでは、ブロードキャスト結合に対して許可する最大テーブルサイズを指定します。結合のパフォーマンスを最適化するには、クラスタサイズに応じて以下の設定を推奨します。

  • 小規模なクラスタノード: 32G joinMaxBroadcastTableSize: 615MB

  • 中規模なクラスタノード: 128GB joinMaxBroadcastTableSize: 1250MB

  • 大規模なクラスタノード: 256GB joinMaxBroadcastTableSize: 2520MB

以下のプロパティは、 values.yamlpresto.hivepresto.iceberg 、および presto.delta の各セクションで構成可能です。

カタログ別の最適化プロパティ

プロパティ名

デフォルト値

説明

parquetBatchReadOptimizationEnabled

true

この最適化により、ベクトル化された読み取りが有効になり、パフォーマンスが大幅に向上します。定義済みのカタログ (hive、iceberg、および delta) ごとに別個のプロパティがあります。

pushdownFilterEnabled

true

この最適化により、テーブルスキャンの効率が向上します。定義済みのカタログ (hive、iceberg、および delta) ごとに別個のプロパティがあります。

quickStats

true

この最適化により、統計情報がない場合はメタデータから統計情報が作成され、パフォーマンスが大幅に向上します。定義済みのカタログ (hive、iceberg、および delta) ごとに別個のプロパティがあります。

maxOutstandingSplits

1800

分割ソースによって提供されるのを待機している分割の数を制限します。この制限に達すると、ライターは、分割の一部がワーカーによって使用されるまで、新しい分割の書き込みを停止します。値を大きくするとメモリ使用量が増えますが、IO を一度に集中することができるため、高速化したり、リソース利用率が向上したりすることがあります。

maxInitialSplits

600

このプロパティでは、hive.max-split-size ではなく hive.max-initial-split-size を使用して、1 つのクエリに対して最初に作成できる分割の数を記述します。最初の分割の分割サイズを小さくする目的は、小さいクエリの同時実行性を向上させるためです。

quicmaxInitialSplitSizekStats

128MB

このプロパティでは、クエリに対して作成される、hive.max-initial-splits での最初の分割の最大サイズを記述します。値を小さくすると、小さいクエリの同時実行性が向上します。このプロパティは最大サイズを表します。読み取るデータの量が hive.max-initial-split-size より小さい場合、実際のサイズは小さくなることがあるためです。

maxSplitSize

256MB

最初の分割の後に作成される分割の最大サイズ。値を大きくすると並列性が低下します。非常に大きいクエリや安定したクラスタでは、これが望ましい場合があります。その理由は、値が大きいと、並列化に起因するコンテキストスイッチ、同期、およびデータ収集を伴わずに、ローカルデータをより効率的に処理できるためです。最適な値は、システムの平均クエリサイズに合わせる必要があります。

splitLoaderConcurrency

32

分割ローダーの同時実行数を増やすと、一部の個々のクエリが 2 倍、3 倍に向上する可能性があります。

Add feedback