【问题标题】:High estimated query cost: How to log how objectify breaks down the query?高估计查询成本:如何记录 objectify 如何分解查询?
【发布时间】:2014-09-20 17:48:56
【问题描述】:

我正在使用一个查询来加载具有条件加载组的相关实体:

@Entity @Cache
public class Result {
    @Load(WithUser.class) @Index private Ref<User> user;
    @Load(WithTile.class) @Index private Ref<Tile> tile;
    @Load(WithLayer.class) private Ref<Layer> layer;
    @Load(WithOverlay.class) private Ref<Overlay> overlay;
    //..
}

我意识到,与我运行的大多数其他查询相比,查询成本大约高出 100 倍。我觉得成本太高了,因为 50 个结果加上 4x50 getByKey() [objectify 应该批处理] 不应该在 CPM_US 0.005 范围内。

是否可以记录 objectify 如何分解查询以及它对数据存储执行哪些请求,以便通过编写更有效的查询来降低成本。

这里有一个类似的问题没有回答:How to enable DEBUG logging on Objectify

【问题讨论】:

    标签: google-app-engine google-cloud-datastore objectify


    【解决方案1】:

    您可以使用 Appengine 提供的 appstat servlet 来探索数据存储操作方面的情况。 我认为实现这一目标的最简洁方法是:

    1. 创建一个 Servlet 来执行您要探索的查询
    2. 使用此处的官方说明安装 appstat servlet:https://developers.google.com/appengine/docs/java/tools/appstats

    3. 在 appengine 上上传到新版本,调用 servlet,然后查看 appstat 统计信息

    一个更简单的方法可能是尝试在官方 Objectify Google Group 上询问 Jeff; 他反应灵敏,过去一直帮助我。 https://groups.google.com/forum/#!forum/objectify-appengine

    重要提示:appstats 一直在引发错误并导致我们的服务器崩溃的原因有很多,其中之一是日志跟踪太长 - 我强烈建议您仅在受控的暂存环境中尝试它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多