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 查询性能中填充 params
和 paramTypes
字段。
2) 如果您正在 运行 进行负载测试,请确保您 运行 您的工作负载至少持续 30 分钟,以确保 Spanner 有机会通过平衡来优化您的数据分布(并创建新的)跨节点拆分。
请注意,您应该能够在任何新鲜度级别(例如 Strong Reads)看到出色的读取性能,如果您使用 Bounded-Staleness,您可能会看到轻微的提升。
我有一个数据库,其中填充了 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 查询性能中填充 params
和 paramTypes
字段。
2) 如果您正在 运行 进行负载测试,请确保您 运行 您的工作负载至少持续 30 分钟,以确保 Spanner 有机会通过平衡来优化您的数据分布(并创建新的)跨节点拆分。
请注意,您应该能够在任何新鲜度级别(例如 Strong Reads)看到出色的读取性能,如果您使用 Bounded-Staleness,您可能会看到轻微的提升。