本页面介绍了如何配置最大提交(写入)延迟时间,以优化 Spanner 中的写入吞吐量。
概览
为确保数据一致性,Spanner 会向数据库中的所有投票副本发送写入请求。此复制过程可能会产生计算开销。如需了解详情,请参阅复制。
通过对写入操作进行吞吐量优化,您可以通过一起执行一组写入操作来分摊这些计算成本。为此,Spanner 引入了轻微的延迟,并收集了一组需要发送给同一投票参与者的写入操作。以这种方式执行写入操作可以显著提高吞吐量,但代价是延迟时间略有增加。
默认行为
如果您未设置提交延迟时间,Spanner 可能会为您设置短暂延迟(如果它认为这样做可以分摊写入操作的费用)。
常见使用场景
您可以根据应用需求手动设置写入请求的延迟时间。您还可以将最大提交延迟时间设置为 0 毫秒,从而为对延迟时间高度敏感的应用停用提交延迟。
如果您有一个能够容忍延迟的应用并希望优化吞吐量,那么设置更长的提交延迟时间会显著提高吞吐量,同时每项写入操作的延迟时间也会更长。例如,如果您要批量加载大量数据,并且应用不关心 Spanner 写入任何单个数据的速度,则可以将提交延迟时间设置为更长的值,例如 100 毫秒。我们建议您先设置 100 毫秒,然后向上或向下调整,直到延迟时间和吞吐量权衡满足您的需求。对于大多数应用,20 毫秒到 100 毫秒之间的值效果最佳。
如果您的应用对延迟时间较为敏感,Spanner 默认也会对延迟时间较为敏感。如果您的工作负载呈尖峰状,Spanner 可能会设置短暂延迟。您可以尝试将值设置为 0 毫秒,以确定以提高吞吐量为代价来缩短延迟时间是否适合您的应用。
设置混合提交延迟时间
您可以对写入操作的子集配置不同的最大提交延迟时间。如果您这样做,Spanner 会使用为写入操作组配置的最短延迟时间。不过,我们建议您在大多数用例中选择单个值,因为这样可以使行为更具可预测性。
限制
您可以将提交延迟时间设置为 0 到 500 毫秒。如果设置的提交延迟时间超过 500 毫秒,则会导致错误。
为提交请求设置提交延迟时间上限
最大提交延迟参数是 CommitRequest
方法的一部分。您可以使用 RPC API、REST API 或 Cloud Spanner 客户端库来访问此方法。
C#
Go
Java
Node.js
Python
Ruby
监控写入请求延迟时间
您可以使用Google Cloud 控制台监控 Spanner CPU 利用率和延迟时间。如果您为写入请求设置较长的延迟时间,可能会看到 CPU 利用率降低,而延迟时间增加。如需了解 Spanner 请求中的延迟时间,请参阅捕获和直观呈现 Spanner API 请求延迟时间。