我已经使用 Union Platform 实现了 JOOQ 作为基于 java 的游戏服务器,并使用 Union Platform 的 Orbiter Micro(Union JS 客户端)在浏览器上运行它。
然而,对于30-40名活跃玩家的小规模赛事,联盟平台在速度上有所落后。
对于每个游戏实例(即每个房间),我配置了一个执行所有查询的工厂连接。它的作用是,
对于每个玩家的回合,
- 玩家可以输入一个整数,经过一系列(4个查询)条件检查后,它通过 JOOQ 插入/更新数据库
- 然后为了获取整数的状态,它再次执行 3 个查询,这有效地转换为 3 个链接哈希图以更新游戏的状态。
现在,响应需要花费很长时间,玩家会发现性能问题。而Union Platform实际上声称可以轻松处理单次超过1000名活跃玩家。因此,这实际上意味着我的 JOOQ 查询中存在一些错误(我确实使用了很多 LEFT OUTER JOIN)。
因此,任何有关提高吞吐量和分析每个查询的建议都是非常受欢迎的。
对我来说,这听起来像是正常的 SQL 调优问题(或者可能是几个不同的问题)。鉴于 jOOQ 允许您执行实际的 SQL,并且使用时可能会出现很多错误OUTER JOIN
如果没有正确的索引和约束,问题很可能出在 SQL 本身。当你打开debug/trace日志记录时,jOOQ会打印出几条信息到日志输出中,包括
调试级别
- SQL语句
- 前 5 条结果记录
- 语句执行时间(该行为已在 jOOQ 3.10 中删除,请参阅https://github.com/jOOQ/jOOQ/issues/8786)
跟踪级别
- 与DEBUG级别相同
- 报表准备时间
- 绑定值
- 语句绑定时间
如果你把这会起作用log4j or slf4j与 jOOQ 一起在您的类路径上。更多详细信息记录在此博客文章
这是一个开始。您还可以使用类似的工具Yourkit 分析器 or JProfiler。显然,您应该考虑您的 Postgres 执行计划。这里有一些迹象表明Postgres 文档.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)