

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解 EXPLAIN ANALYZE 中的 DPUs
<a name="understanding-dpus-explain-analyze"></a>

Aurora DSQL 在`EXPLAIN ANALYZE VERBOSE`計劃輸出中提供**陳述式層級**分散式處理單元 (DPU) 資訊，讓您在開發期間更深入地了解查詢成本。本節說明什麼是 DPUs，以及如何在`EXPLAIN ANALYZE VERBOSE`輸出中解譯它們。

## 什麼是 DPU？
<a name="what-is-dpu"></a>

分散式處理單元 (DPU) 是 Aurora DSQL 所完成工作的標準化測量。它由以下項目組成：
+ **ComputeDPU** – 執行 SQL 查詢所花費的時間
+ **ReadDPU** – 用於從儲存體讀取資料的資源
+ **WriteDPU** - 用來將資料寫入儲存體的資源
+ **MultiRegionWriteDPU** – 用來將寫入複寫到多區域組態中對等叢集的資源。

## EXPLAIN ANALYZE VERBOSE 中的 DPU 用量
<a name="dpu-usage-explain-analyze"></a>

Aurora DSQL 延伸`EXPLAIN ANALYZE VERBOSE`到包含陳述式層級的 DPU 用量預估，直到輸出結束。這可讓您立即了解查詢成本，協助您識別工作負載成本驅動因素、調整查詢效能，以及更好地預測資源用量。

下列範例示範如何解譯 EXPLAIN ANALYZE VERBOSE 輸出中包含的陳述式層級 DPU 預估值。

### 範例 1：SELECT 查詢
<a name="select-query-example"></a>

```
EXPLAIN ANALYZE VERBOSE SELECT * FROM test_table;
```

```
QUERY PLAN
----------------------------------------------------
Index Only Scan using test_table_pkey on public.test_table  (cost=125100.05..171100.05 rows=1000000 width=36) (actual time=2.973..4.482 rows=120 loops=1)
  Output: id, context
  -> Storage Scan on test_table_pkey (cost=125100.05..171100.05 rows=1000000 width=36) (actual rows=120 loops=1)
      Projections: id, context
      -> B-Tree Scan on test_table_pkey (cost=125100.05..171100.05 rows=1000000 width=36) (actual rows=120 loops=1)
Query Identifier: qymgw1m77maoe
Planning Time: 11.415 ms
Execution Time: 4.528 ms
Statement DPU Estimate:
  Compute: 0.01607 DPU
  Read: 0.04312 DPU
  Write: 0.00000 DPU
  Total: 0.05919 DPU
```

在此範例中，SELECT 陳述式會執行僅索引掃描，因此大部分成本來自讀取 DPU (0.04312)，代表從儲存和運算 DPU (0.01607) 擷取的資料，反映用於處理和傳回結果的運算資源。由於查詢不會修改資料，因此沒有寫入 DPU。總 DPU (0.05919) 是運算 \$1 讀取 \$1 寫入的總和。

### 範例 2：INSERT 查詢
<a name="insert-query-example"></a>

```
EXPLAIN ANALYZE VERBOSE INSERT INTO test_table VALUES (1, 'name1'), (2, 'name2'), (3, 'name3');
```

```
QUERY PLAN
----------------------------------------------------
Insert on public.test_table  (cost=0.00..0.04 rows=0 width=0) (actual time=0.055..0.056 rows=0 loops=1)
  ->  Values Scan on "*VALUES*"  (cost=0.00..0.04 rows=3 width=122) (actual time=0.003..0.008 rows=3 loops=1)
        Output: "*VALUES*".column1, "*VALUES*".column2
Query Identifier: jtkjkexhjotbo
Planning Time: 0.068 ms
Execution Time: 0.543 ms
Statement DPU Estimate:
  Compute: 0.01550 DPU
  Read: 0.00307 DPU (Transaction minimum: 0.00375)
  Write: 0.01875 DPU (Transaction minimum: 0.05000)
  Total: 0.03732 DPU
```

此陳述式主要執行寫入，因此大多數成本都與寫入 DPU 相關聯。運算 DPU (0.01550) 代表處理和插入值所完成的工作。讀取 DPU (0.00307) 反映次要系統讀取 （用於目錄查詢或索引檢查）。

請注意讀寫 DPUs旁顯示的交易下限。這些表示*只有在操作包含讀取或寫入時才*套用的每筆交易基準成本。並不表示每筆交易會自動產生 0.00375 讀取 DPU 或 0.05 寫入 DPU 費用。相反地，這些最小值會在成本彙總期間套用到交易層級，而且只有在該交易中發生讀取或寫入時才會套用。由於範圍的這種差異， 中的陳述式層級估算`EXPLAIN ANALYZE VERBOSE`可能不完全符合 CloudWatch 或帳單資料中報告的交易層級指標。

## 使用 DPU 資訊進行最佳化
<a name="using-dpu-information-optimization"></a>

每個陳述式 DPU 預估可讓您在執行時間之外最佳化查詢的強大方式。常用案例包括：
+ **成本意識：**了解查詢相對於其他查詢的成本。
+ **結構描述最佳化：**比較索引或結構描述變更對效能和資源效率的影響。
+ **預算規劃：**根據觀察到的 DPU 用量估計工作負載成本。
+ **查詢比較：**依其相對 DPU 耗用量評估替代查詢方法。

## 解譯 DPU 資訊
<a name="interpreting-dpu-information"></a>

使用來自 的 DPU 資料時，請記住下列最佳實務`EXPLAIN ANALYZE VERBOSE`：
+ **以方向使用：**將報告的 DPU 視為了解查詢*相對*成本的方式，而不是與 CloudWatch 指標或帳單資料完全相符。由於`EXPLAIN ANALYZE VERBOSE`報告陳述式層級成本，而 CloudWatch 彙總交易層級活動，因此預期會有差異。CloudWatch 也包含`EXPLAIN ANALYZE VERBOSE`刻意排除的背景操作 （例如 ANALYZE 或壓縮） 和交易額外負荷 (`BEGIN`/`COMMIT`)。
+ 在分散式系統中，跨**執行的 DPU 變異性是正常**的，不表示錯誤。快取、執行計畫變更、並行或資料分佈中的轉移等因素都可能導致相同的查詢從一個執行消耗不同的資源。
+ **批次小型操作：**如果您的工作負載發出許多小型陳述式，請考慮將它們批次處理成較大的操作 （不超過 10MB)。這可減少四捨五入的開銷，並產生更有意義的成本預估。
+ **用於調校，而非計費：** 中的 DPU 資料`EXPLAIN ANALYZE VERBOSE`專為成本感知、查詢調校和最佳化而設計。它不是帳單等級指標。一律依賴 CloudWatch 指標或每月帳單報告，以取得授權成本和用量資料。