性能不佳的单节点 Cloud Spanner 实例

Single node Cloud Spanner instance exhibiting poor performance

我们一直在使用具有三个节点的 Cloud Spanner 并取得了良好的性能

9,010 mutations
in 0.168 seconds
across 106 rows and 85 columns
or 53,630 mutations per second

由于我们仍在开发中,因此我们决定使用单个节点,以节省开发成本。不幸的是,我们的表现非常糟糕。远少于简单地将上述内容减少 66%。我们看到

85 mutations mutation
in 1.7 seconds
across 1 row and 85 columns
or 50 mutations per second

我们从每秒大约 53,630 个突变变为每秒 50 个突变。 性能下降超过 1/1000,而不是预测的 1/3。

我们一行代码都没改,只改了节点数。对于为什么我们在从 3 个云生成器节点变为 1 个云生成器节点时速度如此缓慢,有人有什么建议或想法吗?

编辑:需要说明的是,我们正在使用批量插入,当我们从 3 个实例“减少”到 1 个时,我们删除了节点并从 1 个重新开始。

编辑:更正语义(“节点”而不是“实例”)

(促进评论回答)。

我假设此时 Spanner 实例监控统计数据(CPU、读写 QPS)较低,因此实例没有过载...

您可以尝试 运行 在一个新的、干净的实例上进行相同的测试,看看是否只是您的实例有问题。可能是在按比例缩小之后它需要做一些内务处理。在不知道您的模式、行数和正在执行的操作的情况下,很难说清楚。

另一方面,您可以检查 Spanner API 的 stackdriver 中的 RPC 延迟监控统计数据,以准确了解延迟的位置(尽管最有可能在 Commit 中)。

GCP 解决了 this issue 中的问题。复制相关部分以防 URL 出现故障:

Reducing the number of nodes from 3 to 1 is quite drastic for Cloud Spanner (is comparable to 300 to 100). The product is delivering high availability, data are replicated in different zones. So what happened in the background is that all the data from all replicas have to be restructured in the background to 1 node. That is relatively big operation that is supposed to take some time. In time background operation finishes, the performance should go back to expected level.