讀/寫吞吐量的單位為讀服務能力單元和寫服務能力單元,簡稱 CU(Capacity Unit),是數據讀寫操作的最小計費單位。當通過表格存儲的 API 對數據表進行讀寫操作時,會消耗對應的寫服務能力單元和讀服務能力單元。
CU 計算規則
1 單位讀服務能力單元表示從數據表中讀一條 4 KB 數據。
1 單位寫服務能力單元表示向數據表寫一條 4 KB 數據。
操作數據大小不足 4 KB 的部分向上取整,例如寫入 7.6 KB 數據消耗 2 單位寫服務能力單元,讀出 0.1 KB 數據消耗 1 單位讀服務能力單元。
按量讀/寫吞吐量
按量讀/寫吞吐量是數據表在每秒實際消耗的讀/寫吞吐量中超出預留讀/寫吞吐量的部分,統計周期為 1 秒。每個小時內,表格存儲對預留讀/寫吞吐量取平均值,對按量讀/寫吞吐量取累加值來作為用戶實際消耗的吞吐量。
由于按量讀/寫吞吐量的模式無法預估需要為數據表預留的計算資源,表格存儲需要提供足夠的服務能力以應對突發的訪問高峰,所以按量讀/寫吞吐量的單價高于預留讀/寫吞吐量的單價。合理設置數據表的預留讀/寫吞吐量能夠有效地降低使用成本。
由于按量讀/寫吞吐量無法準確估計需要預留的資源,在某些極端訪問情況下,如果單個分區鍵每秒的訪問需要消耗 10000 CU,表格存儲可能會返回 OTSCapacityUnitExhausted 錯誤。此時需要使用退避重試等策略來減少訪問該數據表的頻率。
預留讀/寫吞吐量
使用多元索引時,表格存儲會根據索引數據規模自動設置一個預留讀吞吐量。更多信息,請參見多元索引計量計費。多元索引中的預留讀吞吐量配置不支持調整,如果期望減少該部分開銷,只能通過優化索引大小或行數來解決。
預留讀/寫吞吐量是 CU 模式(原按量模式)下的高性能型實例中數據表的一個屬性。在創建數據表時,可以為數據表指定預留讀/寫吞吐量。
當設置的預留讀/寫吞吐量大于 0 時,表格存儲會為數據表分配和預留相應的資源,每秒對數據表的訪問不超過預留讀/寫吞吐量時將按照預留讀/寫吞吐量的單價計費。
當設置的預留讀/寫吞吐量等于 0 時,表格存儲不會為數據表分配和預留相應的資源。
說明不存在的數據表將視作預留讀/寫吞吐量均為 0,訪問不存在的數據表將根據操作類型消耗 1 個按量讀 CU 或者 1 個按量寫 CU。
由于預留讀/寫吞吐量在單價上低于按量讀/寫吞吐量,配置合適的預留讀/寫吞吐量可以進一步降低成本。例如數據表創建后如果需要導入大量數據,可以設置較大的預留寫吞吐量,能夠以較低的寫成本導入數據,當數據導入完成后,再將預留讀/寫吞吐量下調。
使用限制
容量型實例下的數據表不支持設置預留讀/寫吞吐量。
當預留讀/寫吞吐量大于 0 時,即使沒有讀寫請求也會進行計費,所以表格存儲限制用戶能夠自行設置的單個數據表預留讀/寫吞吐量最大為 100000(預留讀吞吐量和預留寫吞吐量分別不超過 100000)。當用戶對單個數據表的預留讀/寫吞吐量需求超出 100000 時,可以提交工單提高預留讀/寫吞吐量。
預留讀/寫吞吐量更新規則
通過 UpdateTable 接口可以動態修改表的預留讀/寫吞吐量配置。預留讀/寫吞吐量的更新規則如下:
每個自然日內(UTC時間 00:00:00 到第二天的 00:00:00 ,北京時間早上 8 點到第二天早上 8 點),上調或者下調預留讀/寫吞吐量的總次數不做限制,一張數據表上的兩次更新的間隔必須大于 1 分鐘。
預留讀/寫吞吐量調整完成后 1 分鐘內生效。
計算示例
假如數據表設置的預留讀吞吐量為 100 CU,連續 3 秒的訪問情況如下:
T0:讀操作實際消耗 120 CU 讀吞吐量,則這 1 秒內預留吞吐量為 100 CU,消耗的按量讀吞吐量為 20 CU。
T1:讀操作實際消耗 95 CU 讀吞吐量,則這 1 秒內預留吞吐量為 100 CU,消耗的按量讀吞吐量為 0 CU。
T2:讀操作實際消耗 110 CU 讀吞吐量,則這 1 秒內預留吞吐量為 100 CU,消耗的按量讀吞吐量為 10 CU。
T0 到 T2 時刻消耗的讀吞吐量為:100 CU 預留讀吞吐量以及 30 CU 按量讀吞吐量。