全部产品
Search
文档中心

表格存储:读写吞吐量

更新时间:Oct 15, 2024

读/写吞吐量的单位为读服务能力单元和写服务能力单元,简称 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 错误。此时需要使用退避重试等策略来减少访问该数据表的频率。

预留读/写吞吐量

说明

使用多元索引时,表格存储会根据索引数据规模自动设置一个预留读吞吐量。更多信息,请参见多元索引计量计费。多元索引中的预留读吞吐量配置不支持调整,如果期望减少该部分开销,只能通过优化索引大小或行数来解决。

预留读/写吞吐量是高性能型实例中数据表的一个属性。在创建数据表时,可以为数据表指定预留读/写吞吐量。

  • 当设置的预留读/写吞吐量大于 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 按量读吞吐量。