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