我们如何分析 JOOQ 语句的速度

She*_*har 4 java sql postgresql performance jooq

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

然而,对于30-40名活跃玩家的小规模赛事,联盟平台在速度上有所落后。

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

对于每个玩家的回合,

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

现在,响应需要花费很长时间,玩家会发现性能问题。而Union Platform实际上声称可以轻松处理单次超过1000名活跃玩家。因此,这实际上意味着我的 JOOQ 查询中存在一些错误(我确实使用了很多 LEFT OUTER JOIN)。

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

Luk*_*der 7

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

调试级别

跟踪级别

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

如果您将log4jslf4j与 jOOQ 一起放在类路径中,这将起作用。更多详细信息记录在这篇博客文章中

这是一个开始。您还可以使用Yourkit ProfilerJProfiler 等工具。显然,您应该考虑您的 Postgres 执行计划。Postgres 文档中对此有一些说明。