本页面介绍了如何配置最长提交(写入)延迟时间, 优化 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 控制台。为写入请求设置较长的延迟时间后, CPU 利用率有可能 而延迟时间则会增加如需了解 Spanner 请求,请参阅 捕获并直观呈现 Spanner API 请求延迟时间。