我有一些AppEngine操作花费的时间比预期的多,所以我一直在查看GAE控制台上的跟踪日志以获得一些见解。
其中一个包含一个简单的查询来排序实体,例如
(data, cursor, more) = query.order(-cls.created).fetch_page(RESULTS_PER_PAGE, start_cursor=cursor)
但是根据日志,如果我正确理解了跟踪(下面的截图),操作运行2查询:一个获取数据(RunQuery),一个查找是否有更多数据(下一个)。两者都没有花太多时间,但两者之间有600毫秒的延迟。
我想知道为什么这种延迟太长了?我已经看到了一些关于Next()的问题,其中查询需要更长时间(How do I prevent application calling datastore_v3.next() when calling get_multi?),但在我的情况下,Next()的时间非常短。瓶颈似乎是两者之间的时间。在很多情况下会发生这种情况 - 以前的NDB查询只是一个例子。
所以:
我正在使用标准实例,除了入站热备之外,我的app.yaml文件中没有任何特定的设置。
答案 0 :(得分:1)
使用.fetch()
代替.fetch_page()
...前者达到限制并停止...它不会返回有关是否有更多结果的信息
答案 1 :(得分:0)
这只是推测,但我认为查询结果被分成多个块(.Next
)的原因是因为每个块的大小。如果您可以减小实体的大小或使用Projection queries缩小结果,则可能会看到更好的效果。