我有一个填充了100M行的数据库,其中包含简单的键和值。主键只是一个随机的32字节字符串,值是一个32字节的字符串。 (它与YCSB非常相似,虽然更小)。
我看到单个节点执行点读取的吞吐量非常不一致。我看到单个节点的QPS高达15k,但有时我看到的吞吐量要低得多。较高的QPS似乎是查询较小的密钥子集的结果。我是否有可能遇到一些奇怪的缓存行为?
答案 0 :(得分:1)
缓存(即从辅助存储缓存数据)不应该如此严重地影响您的性能,并且在Cloud Spanner的大多数性能讨论中通常可以忽略它。但是,Cloud Spanner确实有query cache,这可能是此问题的一部分。
有一些因素会严重影响您的表现:
1)如果您正在使用SQL查询进行点读取,请确保使用查询参数。换句话说,请确保填充executeSql个请求中的params
和paramTypes
字段。这将提高查询性能并提供更好的安全性。有关查询性能的详细信息,请参阅此whitepaper。
2)如果您正在运行负载测试,请确保运行工作负载至少30分钟,以确保Spanner有机会通过在节点之间平衡(和创建新的)拆分来优化数据分发。 / p>
请注意,您应该能够在任何新鲜度级别(例如Strong Reads)看到出色的阅读效果,如果使用Bounded-Staleness,您可能会看到轻微的提升。