評估您是否具有適當大小的佈建容量 - Amazon DynamoDB

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

評估您是否具有適當大小的佈建容量

本節概述如何評估 DynamoDB 資料表是否有適當大小的佈建。隨著工作負載的演變,您應該適時修改操作程序,尤其是在佈建模式下設定 DynamoDB 資料表時,可能會有過度佈建或佈建不足的風險。

以下描述的程序需要統計資訊,這些資訊應從支援您生產應用程式的 DynamoDB 資料表擷取。若要瞭解您的應用程式行為,您應定義足以從應用程式擷取資料季節性的時段。例如,若應用程式顯示每週模式,三週時間便應足夠來分析應用程式輸送量需求。

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

評估容量時,DynamoDB 資料表可以獨立設定讀取容量單位 (RCU)寫入容量單位 (WCU)。如果資料表設定了任何全域次要索引 (GSI),則需指定耗用輸送量,這也與基礎資料表的 RCU 和 WCU 無關。

注意

本機次要索引 (LSI) 會耗用基礎資料表的容量。

如何擷取 DynamoDB 資料表上的耗用指標

若要評估表格和 GSI 容量,請監視下列 CloudWatch 測量結果,然後選取適當的維度來擷取表格或 GSI 資訊:

讀取容量單位 寫入容量單位

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

您可以透過 AWS CLI 或執行此操作 AWS Management Console。

AWS CLI

在擷取資料表使用量指標之前,我們需要先使用 CloudWatch API 擷取一些歷史資料點。

首先要建立兩個檔案:write-calc.jsonread-calc.json。這些檔案代表資料表或 GSI 的計算。您需要更新部分欄位 (如下表所示),以符合您的環境。

欄位名稱 定義 範例
<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/DynamoDB", "MetricName": "ProvisionedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "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": "<ent-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

讀取計算檔案會使用類似檔案。此檔案將擷取指定日期範圍時段內佈建和耗用的 RCU 數。read-calc.json 檔案的內容應如下所示:

{ "MetricDataQueries": [ { "Id": "provisionedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ProvisionedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "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
  2. 若要擷取讀取使用率資料,請發出下列命令:

    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": [] }
注意

若您指定一個短期和一個長期時間範圍,您可能需要修改指令碼中預設為 24 的 MaxDatapoints。這代表每小時產生一個資料點,每天 24 個資料點。

AWS Management Console
  1. 登入 AWS Management Console 並瀏覽至 CloudWatch 服務頁面。 AWS 區域 如有必要,請選取適當的。

  2. 找出左側導覽列上的「量度」區段,然後選取「所有量度」。

  3. 這會開啟一份儀表板,其中包含兩個面板。頂部面板將顯示圖形,底部面板將顯示您想要繪製圖形的指標。選擇 DynamoDB

  4. 選擇表格測量結果。接著會顯示目前區域中的資料表。

  5. 使用「搜尋」方塊來搜尋表格名稱,並選擇寫入作業測量結果:ConsumedWriteCapacityUnitsProvisionedWriteCapacityUnits

    注意

    此範例討論寫入操作指標,但您也可以用這些步驟來繪製讀取操作指標的圖形。

  6. 選擇圖形量度 (2) 索引標籤以修改公式。依預設, CloudWatch 選取圖表的統計函數「平均值」。

    選取的圖形量度和平均值作為預設統計函數。
  7. 同時選取兩個圖形化指標 (左側的核取方塊) 後,選取選單 Add math (新增數學),再選取 Common (一般) 及 Percentage (百分比) 函數。重複該過程兩次。

    第一次選取 Percentage (百分比) 函數:

    CloudWatch 控制台。已針對圖形量度選取「百分比」函數。

    第二次選取 Percentage (百分比) 函數:

    CloudWatch 控制台。系統會再次選取「百分比」函數作為圖形的量度。
  8. 此時,選單底部應有四個指標。接著進行 ConsumedWriteCapacityUnits 計算。為了保持一致,我們需要匹配我們在 AWS CLI 部分中使用的名稱。按一下 m1 ID,並將此值變更為 consumedWCU

    CloudWatch 控制台。具有 m1 識別碼的圖形度量會重新命名為使用者 WCU。

    ConsumedWriteCapacityUnit標籤重新命名為consumedWCU

    帶有ConsumedWriteCapacityUnit標籤的圖形度量會重新命名為 Consu MedWCU。
  9. 將統計資料從 Average (平均值) 變更為 Sum (總和)。此動作會自動建立另一個稱為 ANOMALY_DETECTION_BAND 的指標。針對此程序的範圍,讓我們移除新產生之 ad1 量度上的核取方塊來忽略它。

    CloudWatch 控制台。在圖形測量結果的下拉式清單中選取統計值 SUM。
    CloudWatch 控制台。「異常 _ 偵測 _ 頻帶」量度會從圖形量度清單中移除。
  10. 重複步驟 8,將 m2 ID 重新命名為 provisionedWCU。將統計資料設定保留為 Average (平均值)。

    CloudWatch 控制台。具有 m2 識別碼的圖形量度會重新命名為已佈建 WCU。
  11. 選取 Expression1 標籤,並將值更新為 m1,將標籤更新為 Consumed WCUs

    注意

    請確認您只選取 m1 (左側的核取方塊) 及 provisionedWCU,適當地視覺化資料。按一下 Details (詳細資料),並將公式變更為 consumedWCU/PERIOD(consumedWCU),以更新公式。此步驟也可能產生另一個 ANOMALY_DETECTION_BAND 指標,但針對此程序的範圍,我們可加以忽略。

    m1 和已提供的 WCU 已選取。m1 的詳細資料已更新為領事館/期間 (消費管理中央大學)。
  12. 您現在應有兩個圖形:一個表示資料表上已佈建的 WCU,另一個表示已耗用的 WCU。圖形的形狀可能與下方形狀不同,但您可以將其做為參考:

    含有已佈建的 WCU 和已繪製表格的已耗用 WCU 的圖表。
  13. 選取 Expression2 圖形 (e2) 以更新百分比公式。將標籤和 ID 重新命名為 utilizationPercentage。將公式重新命名,以符合 100*(m1/provisionedWCU)

    CloudWatch 控制台。運算式 2 的標籤和 ID 會重新命名為「使用率百分比」。
    CloudWatch 控制台。運算式 2 的百分比公式已更新為 100* (M1/佈建WCU)。
  14. 除了 utilizationPercentage 之外,從所有指標移除核取方塊,視覺化您的使用率模式。預設間隔設為 1 分鐘,但您可以根據需要修改。

    所選時間間隔的「使用率百分比」測量結果圖表。

這是一個更長時間及 1 小時的視圖。您可以看到有些間隔使用率高於 100%,但這個特定的工作負載具有較長的間隔,使用率為零。

長時間的利用模式。它突出顯示了超過 100% 和零的利用週期。

您可能得到與此範例中的圖片不同的結果。取決於您工作負載中的資料。使用率超過 100% 的間隔容易發生限流。DynamoDB 提供高載容量,但是一旦高載容量完成,高於 100% 的任何項目都會受到限流。

如何識別佈建不足的 DynamoDB 資料表

針對多數工作負載,當資料表持續耗用超過其佈建容量的 80%,就會被視為佈建不足。

高載容量是一項 DynamoDB 功能,可讓客戶暫時耗用比原先佈建更多的 RCU/WCU (超過資料表定義的每秒佈建輸送量)。高載容量是為了吸收由於特殊事件或使用量尖峰而突增的流量。高載容量不會一直持續執行。一旦耗盡未使用的 RCU 和 WCU,若您嘗試耗用超過佈建的容量,就會受到限流。當應用程式流量接近 80% 使用率時,限流風險就會大幅提高。

80% 使用率規則會因資料的季節性和流量成長而有所不同。請考量下列情況:

  • 如果您的流量在過去 12 個月內穩定保持約 90% 的使用率,那麼您的資料表容量剛好

  • 如果您的應用程式流量在 3 個月內以每月 8% 的速度增加,您將達到 100%

  • 如果您的應用程式流量在略多於 4 個月的期間以 5% 的速度增加,您仍會達到 100%

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

在部分特殊情況下,每天或每週進行分析時,資料會出現偏斜。例如,如果季節性應用程式在工作時間內使用量激增 (但在工作時間以外降到幾乎為零),您可以透過排程 auto 調整規模,在其中指定一天中的小時 (以及星期幾) 以增加佈建容量以及何時減少它,從而獲益。如果您的季節性不太明顯,您也可以從 DynamoDB 表格 auto 擴展配置中受益,而不是瞄準更高的容量以滿足繁忙時間。

注意

當您為基礎資料表建立 DynamoDB 自動擴展組態時,請記得將任何與資料表相關的 GSI 加入其他組態。

如何識別過度佈建的 DynamoDB 資料表

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

當您的資料表包含數個較低的使用間隔時,您可以從使用 auto 資源調整規模政策中獲益,無論是排定 auto 調度資源調整規模,或只針對以使用率為基礎的資料表設定預設的 auto 調整資源調度

如果您的工作負載使用率低到高節流率 (間隔中的 Max (ThrottleEvents) /Min (ThrottleEvents)),則當您的工作負載非常尖銳,其中流量在某些日子 (或數小時) 增加很多時,可能會發生這種情況,但通常流量一直很低。在這些情況下,使用排程的 auto 調整可能會有所幫助。