【问题标题】:How can we profile JOOQ statements for speed我们如何分析 JOOQ 语句的速度
【发布时间】:2012-01-23 13:58:45
【问题描述】:

我已经使用 Union Platform 作为基于 java 的游戏服务器实现了 JOOQ,并使用 Union Platform 的 Orbiter Micro(Union JS 客户端)在浏览器上运行它。

但是,在游戏中只有 30-40 名活跃玩家的活动中,联盟平台在速度方面落后。

对于每个游戏实例(即每个房间),我配置了一个执行所有查询的工​​厂连接。它的作用是,

对于每个玩家的回合,

  • 玩家可以输入一个整数,并在一系列(4 次查询)条件检查后,通过 JOOQ 插入/更新数据库
  • 然后为了取回整数的状态,它再次执行 3 个查询,这些查询有效地转换为 3 个链接哈希图以更新游戏状态。

现在,响应需要很长时间,以至于玩家看到了性能问题。而联盟平台实际上声称可以轻松处理 1000 多名活跃玩家。所以这实际上意味着我的 JOOQ 查询中有一些错误(我确实使用了很多 LEFT OUTER JOIN)。

因此,我们非常欢迎任何关于提高吞吐量和分析每个查询的建议。

【问题讨论】:

    标签: java sql performance postgresql jooq


    【解决方案1】:

    对我来说,这听起来像是普通的 SQL 调优问题(或者可能是几个不同的问题)。鉴于 jOOQ 允许您执行实际 SQL,并且在没有正确索引和约束的情况下使用 OUTER JOIN 时可能会出现很多问题,因此问题很可能出在 SQL 本身上。当你打开调试/跟踪日志时,jOOQ 会在日志输出中打印出几条信息,包括

    调试级别

    • SQL 语句
    • 结果的前 5 条记录
    • 语句执行时间

    跟踪级别

    • 与 DEBUG 级别相同
    • 报表准备时间
    • 绑定值
    • 语句绑定时间

    如果您将 log4jslf4j 与 jOOQ 一起放在类路径中,这将起作用。更多详细信息记录在此blog post

    这是一个开始。您也可以使用Yourkit ProfilerJProfiler 之类的工具。显然,您应该考虑您的 Postgres 执行计划。在Postgres documentation 中有一些关于此的迹象。

    【讨论】:

    • 感谢 Lukas 的指导。我去看看
    • 嘿 Lukas,我仍然无法找到在哪里设置 JOOQ 的日志记录信息。是在 jooq.properties 中吗??
    • @Shekhar:我已经更新了答案。如博客和 jOOQ 手册中所述,您可以使用 log4jslf4j 作为应用程序的日志库
    猜你喜欢
    • 2016-03-20
    • 2014-05-30
    • 2014-08-06
    • 2013-01-24
    • 2014-11-20
    • 2016-04-21
    • 2019-04-17
    • 2012-06-17
    • 2011-11-13
    相关资源
    最近更新 更多