После обновления версии Ignite до 2.8.0 или 2.9.0 скорость SQL-запросов значительно снизилась, а процессор используется с большим объемом

#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 или планированием.