Почему Apache Ignite Cache.replace-KVV API-вызов выполняет медленно? - PullRequest
0 голосов
/ 28 января 2020

У нас работает кластер Ignite с 12 узлами, работающими на Ignite 2.7.0 на openjdk 1.8 на платформе RHEL.

Наблюдая большое время, затрачиваемое на https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/IgniteCache.html#replace-K-V-V-

Мы наблюдаем замедление с одним нашего процесса, и когда мы попытались углубить его, профилируя JVM, основной виновник (занимающий ~ 78% от общего времени), похоже, исходит от вызова Ignite cache.repalce(K,V,V) api.
Из 77,9 на замену, 39 % принимается GridCacheAdapater.equalVal и 38,5% - GridCacheAdapter.put

Кэш-память разделена, а ATOMI C с readThrough, writeThrough, writeBehindEnabled имеет значение True.

Присоединение снимка профилирования одного узел (аналогично результат профилирования на других узлах). Может кто-нибудь проверить и предложить причину ИЛИ известную проблему с производительностью этой версии Ignite, связанную с cache.replace(k,v,v) api?

enter image description here JVM Prolfiling Снимок одного узла

1 Ответ

1 голос
/ 28 января 2020

Я предполагаю, что это может быть связано со следующей проблемой:

https://issues.apache.org/jira/browse/IGNITE-5003

Проблема, связанная с операциями с тем же ключом перед предыдущей партией обновлений (которые содержат этот ключ) будут храниться в базе данных.

Как я вижу, его следует добавить в Ignite 2.8.

Обновление:

Я протестировал операцию putAll , Из следующих двух изображений вы можете видеть, что putAll ожидает GridCacheWriteBehindStore.write (два разных потока), который содержит updateCache:

public void write(Entry<? extends K, ? extends V> entry) {
    try {
        if (log.isDebugEnabled())
            log.debug(S.toString("Store put",
                "key", entry.getKey(), true,
                "val", entry.getValue(), true));

        updateCache(entry.getKey(), entry, StoreOperation.PUT);
    }

enter image description here

enter image description here

И при условии, что проблема может повлиять на ваши операции пут (или заменить).

...