

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

# 對 Amazon Keyspaces 中的容量管理錯誤進行故障診斷
<a name="troubleshooting.serverless"></a>

無法使用無伺服器容量？ 以下是一些常見問題，以及如何解決這些問題。

## 無伺服器容量錯誤
<a name="troubleshooting-serverless"></a>

本節概述如何識別與無伺服器容量管理相關的錯誤，以及如何解決這些錯誤。例如，當您的應用程式超過佈建的輸送量容量時，您可能會發現容量事件不足。

由於 Apache Cassandra 是叢集型軟體，專為在節點機群上執行而設計，因此沒有與無伺服器功能相關的例外狀況訊息，例如輸送量容量。大多數驅動程式只了解 Apache Cassandra 中可用的錯誤代碼，因此 Amazon Keyspaces 會使用相同的一組錯誤代碼來維持相容性。

若要將 Cassandra 錯誤對應至基礎容量事件，您可以使用 Amazon CloudWatch 來監控相關的 Amazon Keyspaces 指標。導致用戶端錯誤的容量不足事件，可根據導致事件的資源分類為這三個群組：
+ **資料表** – 如果您選擇資料表的**佈建**容量模式，且應用程式超過佈建的輸送量，則可能會發現容量不足錯誤。如需詳細資訊，請參閱[在 Amazon Keyspaces 中設定讀取/寫入容量模式](ReadWriteCapacityMode.md)。
+ **分割區** – 如果針對指定分割區的流量超過 3，000 RCUs 或 1，000 個 WCUs，您可能會遇到容量不足的事件。最佳實務是建議在分割區之間均勻分配流量。如需詳細資訊，請參閱[資料建模最佳實務：設計資料模型的建議](data-modeling.md)。
+ **連線** – 如果您超過每個連線每秒最大操作數的配額，可能會遇到輸送量不足的情況。若要提高輸送量，您可以在設定與驅動程式的連線時增加預設連線數。

  若要了解如何設定 Amazon Keyspaces 的連線，請參閱 [如何在 Amazon Keyspaces 中設定連線](connections.md#connections.howtoconfigure)。如需透過 VPC 端點最佳化連線的詳細資訊，請參閱 [如何在 Amazon Keyspaces 中透過 VPC 端點設定連線](connections.md#connections.VPCendpoints)。

若要判斷哪個資源造成傳回用戶端錯誤的容量不足事件，您可以在 Amazon Keyspaces 主控台中檢查儀表板。根據預設，主控台會在資料表的容量索引標籤的**容量和相關指標**區段中，提供最常見**容量**和流量相關 CloudWatch 指標的彙總檢視。

若要使用 Amazon CloudWatch 建立您自己的儀表板，請檢查下列 Amazon Keyspaces 指標。
+ `PerConnectionRequestRateExceeded` – 對 Amazon Keyspaces 的請求超過每個連線請求率的配額。每個客户端到 Amazon Keyspaces 的連線最多可支援每秒 3000 個 CQL 請求。透過建立多個連線，可以每秒執行 3000 多個請求。
+ `ReadThrottleEvents` – 請求超過資料表讀取容量的 Amazon Keyspaces。
+ `StoragePartitionThroughputCapacityExceeded` – 請求超過分割區輸送量容量的 Amazon Keyspaces 儲存分割區。Amazon Keyspaces 儲存分割區每秒最多可支援 1000 WCU/WRU 和 3000 RCU/RRU。為了減少這些例外情況，建議您查看資料模型，以便在更多分區之間分配讀取/寫入流量。
+ `WriteThrottleEvents` – 請求超過資料表寫入容量的 Amazon Keyspaces。

若要進一步了解 CloudWatch，請參閱 [使用 Amazon CloudWatch 監控 Amazon Keyspaces](monitoring-cloudwatch.md)。如需 Amazon Keyspaces 所有可用 CloudWatch 指標的清單，請參閱 [Amazon Keyspaces 指標和維度](metrics-dimensions.md)。

**注意**  
若要開始使用顯示 Amazon Keyspaces 所有常用指標的自訂儀表板，您可以使用[AWS 範例](https://github.com/aws-samples/amazon-keyspaces-cloudwatch-cloudformation-templates)儲存庫中 GitHub 上可用的預先建置 CloudWatch 範本。

**Topics**
+ [用戶端錯誤](#troubleshooting.serverless.clientside)
+ [資料匯入期間寫入逾時錯誤](#troubleshooting.serverless.writetimeout)
+ [金鑰空間或資料表儲存體大小](#troubleshooting.serverless.storagesize)

### 我從用戶端驅動程式收到容量`NoHostAvailable`不足的錯誤
<a name="troubleshooting.serverless.clientside"></a>

**您正在查看資料表的 `Read_Timeout`或 `Write_Timeout`例外狀況。**

重複嘗試寫入或讀取容量不足的 Amazon Keyspaces 資料表，可能會導致驅動程式特有的用戶端錯誤。

使用 CloudWatch 監控您的佈建和實際輸送量指標，以及資料表的容量不足事件。例如，沒有足夠輸送量容量的讀取請求會失敗，但有`Read_Timeout`例外狀況，並會發佈到 `ReadThrottleEvents` 指標。輸送量容量不足的寫入請求會失敗，但有`Write_Timeout`例外狀況，並會發佈到 `WriteThrottleEvents` 指標。如需這些指標的詳細資訊，請參閱 [Amazon Keyspaces 指標和維度](metrics-dimensions.md)。

若要解決這些問題，請考慮下列其中一個選項。
+ 增加資料表的*佈建輸送量*，這是應用程式可使用的最大輸送量。如需詳細資訊，請參閱[讀取容量單位和寫入容量單位](ReadWriteCapacityMode.Provisioned.md#ReadWriteCapacityMode.Provisioned.Units)。
+ 讓服務透過自動擴展代表您管理輸送量容量。如需詳細資訊，請參閱[使用 Amazon Keyspaces 自動擴展自動管理輸送量容量](autoscaling.md)。
+ 選擇資料表的**隨需**容量模式。如需詳細資訊，請參閱[設定隨需容量模式](ReadWriteCapacityMode.OnDemand.md)。

如果您需要增加帳戶的預設容量配額，請參閱 [Amazon Keyspaces 配額 （適用於 Apache Cassandra)](quotas.md)。

**您看到與超過分割區容量相關的錯誤。**

當您看到錯誤時`StoragePartitionThroughputCapacityExceeded`，會暫時超過分割區容量。這可能會由自適應容量或隨需容量自動處理。我們建議您檢閱資料模型，將讀取/寫入流量分散到更多分割區，以減少這些錯誤。Amazon Keyspaces 儲存分割區每秒最多可支援 1000 WCU/WRU 和 3000 RCU/RRU。若要進一步了解如何改善資料模型，以將讀取/寫入流量分散到更多分割區，請參閱 [資料建模最佳實務：設計資料模型的建議](data-modeling.md)。

`Write_Timeout` 例外狀況也可能是由並行寫入操作的速率提高所造成，包括相同邏輯分割區中的靜態和非靜態資料。如果預期流量會執行多個並行寫入操作，其中包含相同邏輯分割區內的靜態和非靜態資料，建議您分別寫入靜態和非靜態資料。分別寫入資料也有助於最佳化輸送量成本。

**您看到與超出連線請求率相關的錯誤。**

由於下列其中一個原因`PerConnectionRequestRateExceeded`，您看到 。
+ 您可能沒有為每個工作階段設定足夠的連線。
+ 您取得的連線可能少於可用的對等，因為您未正確設定 VPC 端點許可。如需 VPC 端點政策的詳細資訊，請參閱 [使用 Amazon Keyspaces 的介面 VPC 端點](vpc-endpoints.md#using-interface-vpc-endpoints)。
+ 如果您使用的是 4.x 驅動程式，請檢查您是否已啟用主機名稱驗證。根據預設，驅動程式會啟用 TLS 主機名稱驗證。此組態會導致 Amazon Keyspaces 顯示為驅動程式的單一節點叢集。建議您關閉主機名稱驗證。

我們建議您遵循這些最佳實務，以確保您的連線和輸送量已最佳化：
+ **設定 CQL 查詢輸送量調校。**

  Amazon Keyspaces 每秒支援每個 TCP 連線最多 3，000 個 CQL 查詢，但驅動程式可以建立的連線數量沒有限制。

  大多數開放原始碼 Cassandra 驅動程式會建立連至 Cassandra 的連線集區，並透過該連線集區進行負載平衡查詢。Amazon Keyspaces 向驅動程式公開 9 個對等 IP 地址。大多數驅動程式的預設行為是建立與每個對等 IP 地址的單一連線。因此，使用預設設定的驅動程式 CQL 查詢輸送量上限為每秒 27，000 個 CQL 查詢。

  若要增加此數量，建議您增加驅動程式在其連線集區中維護的每個 IP 地址的連線數量。例如，將每個 IP 地址的最大連線數設定為 2 會將驅動程式的最大輸送量加倍至每秒 54，000 個 CQL 查詢。
+ **最佳化您的單一節點連線。**

  根據預設，大多數開放原始碼 Cassandra 驅動程式會在建立工作階段時，建立與`system.peers`資料表中公告之每個 IP 地址的一或多個連線。不過，某些組態可能會導致驅動程式連線到單一 Amazon Keyspaces IP 地址。如果驅動程式嘗試對等節點進行 SSL 主機名稱驗證 （例如 DataStax Java 驅動程式），或透過 VPC 端點連線時，可能會發生這種情況。

  若要取得與多個 IP 地址連線的驅動程式相同的可用性和效能，建議您執行下列動作：
  + 根據所需的用戶端輸送量，將每個 IP 的連線數增加到 9 或更高。
  + 建立自訂重試政策，以確保重試在相同的節點上執行。如需詳細資訊，請參閱 

    [如何在 Amazon Keyspaces 中設定連線的重試政策](connections.md#connections.retry-policies).
  + 如果您使用 VPC 端點，請授予用於連線至 Amazon Keyspaces 的 IAM 實體存取許可，以查詢 VPC 以取得端點和網路介面資訊。這可改善負載平衡並增加讀取/寫入輸送量。如需詳細資訊，請參閱[使用界面 VPC 端點資訊填入`system.peers`資料表項目](vpc-endpoints.md#system_peers)。

### 我在資料匯入期間收到寫入逾時錯誤
<a name="troubleshooting.serverless.writetimeout"></a>

**使用 `cqlsh``COPY`命令上傳資料時，您會收到逾時錯誤。**

```
Failed to import 1 rows: WriteTimeout - Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses]
 message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'write_type': 'SIMPLE', 'consistency': 
 'LOCAL_QUORUM'}, will retry later, attempt 1 of 100
```

Amazon Keyspaces 使用 `ReadTimeout`和 `WriteTimeout`例外狀況來指示寫入請求何時因輸送量容量不足而失敗。為了協助診斷容量不足的例外狀況，Amazon Keyspaces 會在 Amazon CloudWatch 中發佈下列指標。
+ `WriteThrottleEvents`
+ `ReadThrottledEvents`
+ `StoragePartitionThroughputCapacityExceeded`

若要解決資料載入期間容量不足的錯誤，請降低每個工作者的寫入速率或總擷取速率，然後重試上傳資料列。如需詳細資訊，請參閱[步驟 4：設定`cqlsh COPY FROM`設定](bulk-upload-config.md)。如需更強大的資料上傳選項，請考慮使用 DSBulk，可從 [GitHub 儲存庫](https://github.com/datastax/dsbulk)取得。如需逐步說明，請參閱 [教學課程：使用 DSBulk 將資料載入 Amazon Keyspaces](dsbulk-upload.md)。

### 我看不到金鑰空間或資料表的實際儲存大小
<a name="troubleshooting.serverless.storagesize"></a>

**您無法查看金鑰空間或資料表的實際儲存大小。**

若要進一步了解資料表的儲存體大小，請參閱 [在資料表層級評估您的成本](CostOptimization_TableLevelCostAnalysis.md)。您也可以開始計算資料表中的資料列大小，來估計儲存體大小。如需計算資料列大小的詳細指示，請參閱 [估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)。