

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

# 評估您是否具有適當大小的佈建容量
<a name="CostOptimization_RightSizedProvisioning"></a>

本節提供如何評估 Amazon Keyspaces 資料表上是否有適當大小的佈建的概觀。隨著工作負載的演進，您應該適當地修改操作程序，尤其是當您的 Amazon Keyspaces 資料表在佈建模式中設定，而且您有過度佈建或佈建不足資料表的風險時。

本節所述的程序需要從支援生產應用程式的 Amazon Keyspaces 資料表中擷取的統計資訊。若要了解您的應用程式行為，您應該定義足夠重要的時段，以擷取應用程式的資料季節性。例如，若應用程式顯示每週模式，三週時間便應足夠來分析應用程式輸送量需求。

若您不知道從何下手，請使用至少一個月的資料用量進行以下計算。

在評估容量時，對於 Amazon Keyspaces 資料表，您可以獨立設定**讀取容量單位 RCUs)** 和**寫入容量單位 (WCU)**。

**Topics**
+ [如何從 Amazon Keyspaces 資料表擷取取用指標](#CostOptimization_RightSizedProvisioning_ConsumptionMetrics)
+ [如何識別佈建不足的 Amazon Keyspaces 資料表](#CostOptimization_RightSizedProvisioning_UnderProvisionedTables)
+ [如何識別過度佈建的 Amazon Keyspaces 資料表](#CostOptimization_RightSizedProvisioning_OverProvisionedTables)

## 如何從 Amazon Keyspaces 資料表擷取取用指標
<a name="CostOptimization_RightSizedProvisioning_ConsumptionMetrics"></a>

若要評估資料表容量，請監控下列 CloudWatch 指標，然後選取適當的維度以擷取資料表資訊：


| 讀取容量單位 | 寫入容量單位 | 
| --- | --- | 
|  `ConsumedReadCapacityUnits`  |  `ConsumedWriteCapacityUnits`  | 
|  `ProvisionedReadCapacityUnits`  |  `ProvisionedWriteCapacityUnits`  | 
|  `ReadThrottleEvents`  |  `WriteThrottleEvents`  | 

您可以透過 AWS CLI 或 執行此操作 AWS 管理主控台。

------
#### [ AWS CLI ]

擷取資料表取用指標之前，您需要先使用 CloudWatch API 擷取一些歷史資料點。

首先要建立兩個檔案：`write-calc.json` 和 `read-calc.json`。這些檔案代表資料表的計算。您需要更新一些欄位，如下表所示，以符合您的環境。

**注意**  
如果資料表名稱在帳戶中不是唯一的，您也必須指定金鑰空間的名稱。


| 欄位名稱 | 定義 | 範例 | 
| --- | --- | --- | 
| <table-name> | 您正在分析的資料表名稱 | SampleTable | 
| <period> | 您用來評估使用率目標的期間，以秒為單位 | 針對 1 小時的時間，您應指定：3600 | 
| <start-time> | 評估間隔的開始時間，以 ISO8601 格式顯示 | 2022-02-21T23:00:00 | 
| <end-time> | 評估間隔的結束時間，以 ISO8601 格式顯示 | 2022-02-22T06:00:00 | 

寫入計算檔案會擷取指定日期範圍期間內佈建和取用的 WCU 數量。它也會產生可用於分析的使用率百分比。`write-calc.json` 檔案的完整內容看起來應該如下例所示。

```
{
  "MetricDataQueries": [
    {
      "Id": "provisionedWCU",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/Cassandra",
          "MetricName": "ProvisionedWriteCapacityUnits",
          "Dimensions": [
            {
              "Name": "TableName",
              "Value": "<table-name>"
            }
          ]
        },
        "Period": <period>,
        "Stat": "Average"
      },
      "Label": "Provisioned",
      "ReturnData": false
    },
    {
      "Id": "consumedWCU",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/Cassandra",
          "MetricName": "ConsumedWriteCapacityUnits",
          "Dimensions": [
            {
              "Name": "TableName",
              "Value": "<table-name>""
            }
          ]
        },
        "Period": <period>,
        "Stat": "Sum"
      },
      "Label": "",
      "ReturnData": false
    },
    {
      "Id": "m1",
      "Expression": "consumedWCU/PERIOD(consumedWCU)",
      "Label": "Consumed WCUs",
      "ReturnData": false
    },
    {
      "Id": "utilizationPercentage",
      "Expression": "100*(m1/provisionedWCU)",
      "Label": "Utilization Percentage",
      "ReturnData": true
    }
  ],
  "StartTime": "<start-time>",
  "EndTime": "<end-time>",
  "ScanBy": "TimestampDescending",
  "MaxDatapoints": 24
}
```

讀取計算檔案使用類似的指標。此檔案會擷取在指定日期範圍的期間內佈建和取用的 RCUs 數量。在此範例中， `read-calc.json` 檔案的內容看起來應該類似 。

```
{
  "MetricDataQueries": [
    {
      "Id": "provisionedRCU",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/Cassandra",
          "MetricName": "ProvisionedReadCapacityUnits",
          "Dimensions": [
            {
              "Name": "TableName",
              "Value": "<table-name>"
            }
          ]
        },
        "Period": <period>,
        "Stat": "Average"
      },
      "Label": "Provisioned",
      "ReturnData": false
    },
    {
      "Id": "consumedRCU",
      "MetricStat": {
        "Metric": {
          "Namespace": "AWS/Cassandra",
          "MetricName": "ConsumedReadCapacityUnits",
          "Dimensions": [
            {
              "Name": "TableName",
              "Value": "<table-name>"
            }
          ]
        },
        "Period": <period>,
        "Stat": "Sum"
      },
      "Label": "",
      "ReturnData": false
    },
    {
      "Id": "m1",
      "Expression": "consumedRCU/PERIOD(consumedRCU)",
      "Label": "Consumed RCUs",
      "ReturnData": false
    },
    {
      "Id": "utilizationPercentage",
      "Expression": "100*(m1/provisionedRCU)",
      "Label": "Utilization Percentage",
      "ReturnData": true
    }
  ],
  "StartTime": "<start-time>",
  "EndTime": "<end-time>",
  "ScanBy": "TimestampDescending",
  "MaxDatapoints": 24
}
```

建立檔案之後，您就可以開始擷取使用率資料。

1. 若要擷取寫入使用率資料，請發出下列命令：

   ```
   aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
   ```

1. 若要擷取讀取使用率資料，請發出下列命令：

   ```
   aws cloudwatch get-metric-data --cli-input-json file://read-calc.json
   ```

這兩個查詢的結果都是一系列 JSON 格式的資料點，可用於分析。您的結果取決於您指定的資料點數量、期間，以及您自己的特定工作負載資料。在以下範例中可能看起來像 。

```
{
    "MetricDataResults": [
        {
            "Id": "utilizationPercentage",
            "Label": "Utilization Percentage",
            "Timestamps": [
                "2022-02-22T05:00:00+00:00",
                "2022-02-22T04:00:00+00:00",
                "2022-02-22T03:00:00+00:00",
                "2022-02-22T02:00:00+00:00",
                "2022-02-22T01:00:00+00:00",
                "2022-02-22T00:00:00+00:00",
                "2022-02-21T23:00:00+00:00"
            ],
            "Values": [
                91.55364583333333,
                55.066631944444445,
                2.6114930555555556,
                24.9496875,
                40.94725694444445,
                25.61819444444444,
                0.0
            ],
            "StatusCode": "Complete"
        }
    ],
    "Messages": []
}
```

**注意**  
如果您指定短期間和長時間範圍，您可能需要修改值，該`MaxDatapoints`值預設為指令碼中的 24。這代表每小時產生一個資料點，每天 24 個資料點。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 ，並在 [入門 AWS 管理主控台](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html)中導覽至 CloudWatch 服務頁面。 AWS 區域 視需要選取適當的 。

1. 找到左側導覽列上的指標區段，然後選擇**所有指標**。

1. 這會開啟具有兩個面板的儀表板。頂端面板會顯示圖形，而底部面板具有您要繪製圖形的指標。選擇 Amazon Keyspaces 面板。

1. 從子面板中選擇**資料表指標**類別。這會顯示目前 中的資料表 AWS 區域。

1. 向下捲動選單找出您的資料表名稱，然後選取寫入操作指標：`ConsumedWriteCapacityUnits` 和 `ProvisionedWriteCapacityUnits`。
**注意**  
此範例討論寫入操作指標，但您也可以用這些步驟來繪製讀取操作指標的圖形。

1. 選取 **Graphed metrics (2)** (圖表化指標(2)) 標籤，修改公式。根據預設，CloudWatch 會為圖形選擇統計函數**平均**。

1. 同時選取兩個圖形化指標 (左側的核取方塊) 後，選取選單 **Add math** (新增數學)，再選取 **Common** (一般) 及 **Percentage** (百分比) 函數。重複該過程兩次。

   第一次選取**百分比**函數。

   第二次選取**百分比**函數。

1. 此時，選單底部應有四個指標。接著進行 `ConsumedWriteCapacityUnits` 計算。為了保持一致，您需要將名稱與您在 AWS CLI 區段中使用的名稱相符。按一下 **m1 ID**，並將此值變更為 **consumedWCU**。

1. 將統計資料從 **Average** (平均值) 變更為 **Sum** (總和)。此動作會自動建立另一個名為 **ANOMALY\$1DETECTION\$1BAND** 的指標。對於此程序的範圍，您可以透過移除新產生的 **ad1 指標**上的核取方塊來忽略這一點。

1. 重複步驟 8，將 **m2 ID** 重新命名為 **provisionedWCU**。將統計資料設定保留為 **Average** (平均值)。

1. 選擇 **Expression1** 標籤，並將值更新為 **m1**，並將標籤更新為**已使用 WCUs**。
**注意**  
請確認您只選取 **m1** (左側的核取方塊) 及 **provisionedWCU**，適當地視覺化資料。按一下 **Details** (詳細資料)，並將公式變更為 **consumedWCU/PERIOD(consumedWCU)**，以更新公式。此步驟也可能產生另一個 **ANOMALY\$1DETECTION\$1BAND** 指標，但對於此程序的範圍，您可以忽略它。

1. 您現在應該有兩個圖形：一個表示資料表上的佈建 WCUs另一個表示耗用的 WCUs。

1. 選取 Expression2 圖形 (**e2**) 以更新百分比公式。將標籤和 ID 重新命名為 **utilizationPercentage**。將公式重新命名，以符合 **100\$1(m1/provisionedWCU)**。

1. 從 **utilizationPercentage** 以外的所有指標中移除核取方塊，以視覺化您的使用率模式。預設間隔設定為 1 分鐘，但您可以視需要修改間隔。

您取得的結果取決於工作負載的實際資料。使用率超過 100% 的間隔容易發生低輸送量容量錯誤事件。Amazon Keyspaces 提供[高載容量](throughput-bursting.md)，但一旦高載容量用盡，超過 100% 的任何內容都會遇到低輸送量容量錯誤事件。

------

## 如何識別佈建不足的 Amazon Keyspaces 資料表
<a name="CostOptimization_RightSizedProvisioning_UnderProvisionedTables"></a>

對於大多數工作負載，資料表在持續耗用其佈建容量的 80% 以上時，會被視為佈建不足。

[爆量容量](throughput-bursting.md)是一項 Amazon Keyspaces 功能，可讓客戶暫時使用比原始佈建更多的 RCUs/WCUs （超過為資料表定義的每秒佈建輸送量）。高載容量是為了吸收由於特殊事件或使用量尖峰而突增的流量。此高載容量有限，如需詳細資訊，請參閱 [在 Amazon Keyspaces 中有效使用高載容量](throughput-bursting.md)。一旦未使用的 RCUs 和 WCUs 用盡，如果您嘗試使用比佈建更多的容量，可能會遇到低容量輸送量錯誤事件。當您的應用程式流量接近 80% 的使用率時，發生低容量輸送量錯誤事件的風險會大幅提高。

80% 使用率規則會因資料的季節性和流量成長而有所不同。請考量下列情況：
+ 如果您的流量在過去 12 個月內**穩定**保持約 90% 的使用率，那麼您的資料表容量剛好
+ 如果您的應用程式流量在 3 個月內以每月 8% 的速度**增加**，您將達到 100%
+ 如果您的應用程式流量在略多於 4 個月的期間以 5% 的速度**增加**，您仍會達到 100%

上述查詢結果能讓您得知使用率的情況。您可以使用這些結果做為指引，進一步評估其他指標，以協助您根據需要增加資料表容量 (例如：每月或每週成長率)。與您的營運團隊合作，為工作負載和資料表定義合理的百分比。

在某些情況下，當您每天或每週分析資料時，資料會扭曲。例如，如果季節性應用程式在工作時間內 （但在工作時間之外降到幾乎零） 的使用量遽增，您可以受益於[排程應用程式自動擴展](https://docs.aws.amazon.com/autoscaling/application/userguide/examples-scheduled-actions.html)，您可以在其中指定一天的時數 （和一週的天數） 來增加佈建的容量，以及何時減少它。如果您的季節性較不明顯，則您也可以受益於 [Amazon Keyspaces 資料表自動調整規模](autoscaling.md)組態，而不是為了涵蓋忙碌時間而瞄準更高的容量。

## 如何識別過度佈建的 Amazon Keyspaces 資料表
<a name="CostOptimization_RightSizedProvisioning_OverProvisionedTables"></a>

從以上指令碼獲得的查詢結果提供了執行部分初始分析所需的資料點。若您的資料集在數個間隔內顯示的使用率低於 20%，表示資料表可能過度佈建。若要進一步判斷是否需減少 WCU 和 RCU 數量，您應重新檢視間隔中的其他讀數。

當您的資料表包含數個低用量間隔時，您可以透過排程 Application Auto Scaling 或僅為根據使用率的資料表設定預設 Application Auto Scaling 政策，從使用 Application Auto Scaling 政策中獲益。

如果您的工作負載在間隔中具有低使用率和高限流率 (**Max(ThrottleEvents)/Min(ThrottleEvents)**)，則當您的工作負載非常尖峰，其中流量在特定日期 （或一天中的時間） 顯著增加，但在其他情況下一直很低時，可能會發生這種情況。在這些情況下，使用[排定的 Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/examples-scheduled-actions.html) 可能會有所幫助。