Aurora DSQL EXPLAIN プランの操作
Aurora DSQL は PostgreSQL と同様の EXPLAIN プラン構造を使用しますが、分散アーキテクチャと実行モデルを反映するキーが追加されています。
このドキュメントでは、Aurora DSQL EXPLAIN プランの概要を示し、PostgreSQL と比較した類似点と相違点を強調します。Aurora DSQL で使用できるさまざまなタイプのスキャンオペレーションについて説明し、クエリの実行コストを理解するのに役立ちます。
PostgreSQL と Aurora DSQL EXPLAIN プラン
Aurora DSQL は PostgreSQL データベース上に構築され、ほとんどの計画構造を PostgreSQL と共有しますが、クエリの実行と最適化に影響するアーキテクチャ上の主な違いがあります。
| 機能 | PostgreSQL | Aurora DSQL |
|---|---|---|
|
データストレージ |
ヒープストレージ |
ヒープなし。すべての行は一意の識別子によってインデックスが作成されます |
|
プライマリキー |
プライマリキーインデックスはテーブルデータとは異なります |
プライマリキーインデックスは、すべての追加列を INCLUDE 列とするテーブルです。 |
|
セカンダリインデックス |
標準セカンダリインデックス |
PostgreSQL と同じように動作し、キー以外の列を含める機能があります。 |
|
フィルタリング機能 |
インデックス条件、ヒープフィルター |
インデックス条件、ストレージフィルター、クエリプロセッサフィルター |
|
スキャンタイプ |
シーケンシャルスキャン、インデックススキャン、インデックスのみのスキャン |
フルスキャン、インデックスのみのスキャン、インデックススキャン |
|
クエリの実行 |
データベースのローカル |
分散 (コンピューティングとストレージは別) |
Aurora DSQL は、テーブルデータを個別のヒープではなく、プライマリキーの順序で直接保存します。各行は一意のキー、通常はプライマリキーによって識別されるため、データベースの検索をより効率的に最適化できます。アーキテクチャの違いは、PostgreSQL がシーケンシャルスキャンを選択する可能性がある場合に、Aurora DSQL がインデックスのみのスキャンを使用することが多い理由の説明になります。
もう 1 つの主な違いは、Aurora DSQL がコンピューティングをストレージから分離し、実行パスの早い段階でフィルターを適用してデータの移動を減らし、パフォーマンスを向上させることです。
PostgreSQL での EXPLAIN プランの使用の詳細については、「PostgreSQL EXPLAIN documentation
Aurora DSQL EXPLAIN プランの主な要素
Aurora DSQL EXPLAIN プランは、フィルタリングが発生する場所やストレージから取得される列を含め、クエリの実行方法に関する詳細情報を提供します。この出力を理解することにより、クエリのパフォーマンスを最適化できます。
- インデックス条件
インデックスのナビゲーションに使用される条件。スキャンされたデータを削減するのに最も効率的なフィルタリング。Aurora DSQL では、インデックス条件を実行プランの複数のレイヤーに適用できます。
- 計画
ストレージから取得した列。射影が少ないほど、パフォーマンスが向上します。
- ストレージフィルター
ストレージレベルで適用される条件。クエリプロセッサフィルターよりも効率的です。
- クエリプロセッサフィルター
-
クエリプロセッサレベルで適用される条件。フィルタリングの前にすべてのデータを転送する必要があるため、データの移動と処理のオーバーヘッドが増加します。
Aurora DSQL のフィルター
Aurora DSQL はストレージからコンピューティングを分離します。つまり、クエリの実行中にフィルターが適用されるポイントはパフォーマンスに大きな影響を与えます。大量のデータが転送される前に適用されるフィルターは、レイテンシーを低減し、効率を向上させます。フィルターの適用が早いほど、処理、移動、スキャンが必要なデータが少なくなり、クエリが高速化されます。
Aurora DSQL は、クエリパスの複数のステージでフィルターを適用できます。これらのステージを理解することは、クエリプランを解釈し、パフォーマンスを最適化する上で重要です。
| レベル | フィルタータイプ | Description |
|---|---|---|
| 1 | インデックス条件 |
インデックスのスキャン中に適用されます。ストレージから読み取るデータの量を制限し、コンピューティングレイヤーに送信されるデータを削減します。 |
| 2 | ストレージフィルター | データがストレージから読み取られた後、コンピューティングに送信される前に適用されます。インデックスの include 列のフィルターの例を以下に示します。データ転送は減少しますが、読み取り量は減少しません。 |
| 3 | クエリプロセッサフィルター | データがコンピューティングレイヤーに到達した後に適用されます。すべてのデータを最初に転送する必要があるため、レイテンシーとコストが増加します。現在、Aurora DSQL はストレージ上ですべてのフィルタリングと射影オペレーションを実行できないため、一部のクエリはこのタイプのフィルタリングに強制的にフォールバックされる可能性があります。 |