3

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

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

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

对于每个玩家的回合,

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

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

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

4

1 回答 1

4

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

调试级别

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

跟踪级别

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

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

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

于 2011-12-19T12:57:39.377 回答