Cloud Spanner 中的低读取吞吐量

Low read throughput in Cloud Spanner

我有一个数据库,其中填充了 1 亿行以及简单的键和值。主键只是一个随机的 32 字节字符串,值是一个 32 字节的字符串。 (它与 YCSB 非常相似,虽然更小)。

我发现单个节点执行点读取时的吞吐量极不一致。我看到单个节点的 QPS 高达 15k,但有时我看到的吞吐量要低得多。较高的 QPS 似乎是查询较小的键子集的结果。有没有可能我 运行 遇到了一些奇怪的缓存行为?

缓存(即从二级存储中缓存数据)不应该对您的性能产​​生如此严重的影响,并且在 Cloud Spanner 的大多数性能讨论中通常可以忽略它。但是,Cloud Spanner 确实有一个 query cache,这可能是这里问题的一部分。

有几个因素可能会严重影响您的表现:

1) 如果您使用 SQL 查询来获取您的观点,请确保您使用的是查询参数。换句话说,请确保您在 executeSql requests. This will improve performance for queries and also provide better security. More information is available in this whitepaper 查询性能中填充 paramsparamTypes 字段。

2) 如果您正在 运行 进行负载测试,请确保您 运行 您的工作负载至少持续 30 分钟,以确保 Spanner 有机会通过平衡来优化您的数据分布(并创建新的)跨节点拆分。

请注意,您应该能够在任何新鲜度级别(例如 Strong Reads)看到出色的读取性能,如果您使用 Bounded-Staleness,您可能会看到轻微的提升。