Как мы можем профилировать заявления JOOQ для скорости - PullRequest
3 голосов
/ 19 декабря 2011

Я уже внедрил JOOQ с платформой Union Platform в качестве игрового сервера на основе Java и использую Orbiter Micro (Union JS Client) от Union Platform для запуска его в браузере.

Однако событие с небольшими активными значениями 30-40У игроков в игре платформа Union отстает по скорости.

Для каждого игрового экземпляра (т. е. каждой комнаты) я настроил одно фабричное соединение, которое выполняет все запросы.

Для каждого хода игрока

  • игрок может ввести целое число, и после серии (4 запроса) проверок условий он вставляет / обновляет БД черезJOOQ
  • и затем, чтобы вернуть статус целого числа, он снова выполняет 3 запроса, которые фактически преобразуются в 3 связанных хеш-карты для обновления статуса игры.

Теперь ответзанимает так много времени, что игроки видят проблемы с производительностью.В то время как Union Platform фактически утверждает, что может легко справиться с более чем 1000 активных игроков одновременно.Таким образом, это фактически означает, что в моих запросах JOOQ есть некоторые ошибки (я использовал много ЛЕВЫХ ВНЕШНИХ СОЕДИНЕНИЙ).

Так что любые предложения по улучшению пропускной способности и профилированию каждого запроса очень приветствуются.

1 Ответ

3 голосов
/ 19 декабря 2011

Для меня это звучит как обычный вопрос настройки SQL (или, может быть, несколько разных). Учитывая, что jOOQ позволяет вам выполнять реальный SQL, и есть множество ошибок, которые могут возникнуть при использовании OUTER JOIN без правильной индексации и ограничений, вполне вероятно, что проблема связана с самим SQL. Когда вы включаете ведение журнала отладки / трассировки, jOOQ выводит на экран несколько частей информации, включая

Уровень отладки

  • операторы SQL
  • Первые 5 записей результата
  • Время выполнения оператора

Уровень TRACE

  • То же, что уровень DEBUG
  • Время подготовки выписки
  • Связанные значения
  • Время привязки выписки

Это будет работать, если вы добавите log4j или slf4j в путь к классам вместе с jOOQ. Более подробная информация описана в этом сообщении в блоге

Это начало. Вы также можете использовать такой инструмент, как Yourkit Profiler или JProfiler . И, очевидно, вы должны рассмотреть ваши планы выполнения Postgres. Об этом есть некоторые указания в документации Postgres .

...