#java #ignite
#java #ignite
Вопрос:
Я использовал ignite в течение года, все еще в версии 2.7.5.
После выхода версий ignite 2.8.0 и 2.9.0 я попытался обновить свою версию ignite. Но я обнаружил, что скорость sql-запросов значительно снизилась, а процессор использовался с большим объемом. Он использовал в десять раз больше, чем раньше.
У меня есть 3 узла данных, каждый узел имеет 4 ядра процессора и 8 ГБ памяти. 1 логический узел, также 4 ядра процессора и 8 ГБ памяти.
Производительность в ignite версии 2.9.0, zookeeper версии 3.5.8:
запрос в 2.9.0 1
запрос в 2.9.0 2
ignite cpu в 2.9.0
ignite gc в 2.9.0
Производительность в ignite версии 2.7.5, zookeeper версии 3.4.13:
запрос в 2.7.5 1
запрос в 2.7.5 2
ignite cpu в 2.7.5
ignite gc в 2.7.5
Код запроса:
public LeagueService getLeagueInfo4Init(long humanId, Handler<AsyncResult<JsonObject>> handler) {
long startTime = System.currentTimeMillis();
LeagueUtils.getWorkerPool(vertx).executeBlocking(f -> {
// query league member info
List<LeagueMemberEntity> result = leagueMemberEntityDao.selectByHumanId(humanId);
if (result.isEmpty()) {
f.complete();
return;
}
LeagueMemberEntity leagueMemberEntity = result.get(0);
// query league info
LeagueInfoEntity leagueInfoEntity = leagueInfoEntityDao.selectByLeagueId(leagueMemberEntity.getLeagueId());
if (leagueInfoEntity == null) {// no league
leagueMemberEntityDao.remove(leagueMemberEntity);// no league, delete member info
f.complete();
return;
}
LeagueInitInfo leagueInitInfo = getLeagueInitInfoBlock(leagueInfoEntity);
f.complete(leagueInitInfo.toJson());
}, false, ar->{
if(ar.failed()) {
handler.handle(Future.failedFuture(ar.cause()));
Loggers.leagueLogger.error("League operate log ====> query league info for init failed; humanId:{}, useTime:{}ms",
humanId, (System.currentTimeMillis() - startTime), ar.cause());
return;
}
Loggers.leagueLogger.info("League operate log ====> query league info for init; humanId:{}, useTime:{}ms",
humanId, (System.currentTimeMillis() - startTime));
if(ar.result() == null) {
handler.handle(Future.succeededFuture());
} else {
handler.handle(Future.succeededFuture((JsonObject)ar.result()));
}
});
return this;
}
Потому что я не меняю никакого кода или конфигурации, просто обновляю версию ignite и версию zookeeper, я хочу знать, почему это произошло и как этого избежать?
Я рад поделиться более подробной информацией о проблеме, если это необходимо.
Комментарии:
1. Не могли бы вы сделать дамп кучи во время работы с обеими версиями? Или, по крайней мере, гистограмма кучи.
2. @Джерри, довольно сложно понять, что здесь происходит. Возможно ли создать репродуктор и где-нибудь поделиться исходным кодом?
3. @VladimirPligin Спасибо, я сделаю дамп кучи во время теста.
4. Вы также можете извлечь SQL-запрос-нарушитель и запустить EXPLAIN для него, вставив все столбцы результата в вопрос. Возможно, это что-то с индексами SQL или планированием.