Время выполнения запроса Neo4j: при многократном выполнении одного и того же запроса только первый кажется правильным - PullRequest
1 голос
/ 14 марта 2020

Я использую набор данных LDB C для проверки времени выполнения в Neo4j 4.0.1, SF = 1, и я использую java для подключения Neo4j, ResultSummary.resultAvailableAfter (), чтобы получить время выполнения, которое является время, чтобы получить результат и начать потоковую передачу. Но для того же запроса, когда я запускаю в первый раз, время выполнения кажется разумным, например, сотни мс, но когда я продолжаю выполнять этот же запрос, время выполнения становится почти 0. Я предполагаю, что это эффект кеша запросов, но Есть ли правильный подход для проверки времени выполнения запроса и получения разумного результата?

Теперь я могу только перезапустить базу данных, чтобы получить результат, который кажется правильным. Я думаю, это потому, что Neo4j напрямую кэширует результат запроса и просто извлекает его, если один и тот же запрос выполняется несколько раз. Есть ли способ избежать этого? т.е. пусть neo4j выполняет нормальное кеширование (например, узлы и отношения), а не напрямую кеширует результат запроса. Спасибо!

1 Ответ

0 голосов
/ 15 марта 2020

Кэш страницы, скорее всего, отвечает за результаты, которые вы видите (ну, у меня были некоторые обсуждения с инженерами neo4j, когда я работал над созданием кластера neo4j. Их предложения по оптимизации производительности нашего кластера, казалось, указывали на это). Вы должны установить размер кэша страницы на 0 или очень близко к 0 (скажем, 1Meg или что-то низкое). Вы можете прочитать о настройках памяти здесь https://neo4j.com/docs/operations-manual/current/performance/memory-configuration/

Значение параметра c, которое необходимо изменить, равно

dbms.memory.pagecache.size=1M 

или установите его равным 0. Явно установите это значение. Не оставляйте эту настройку прокомментированной. neo4j может назначить размер памяти по умолчанию для кэша страниц. Перезапустите свой сервер / кластер после изменения настроек и посмотрите, какие показатели производительности вы придумали. Вы также должны проверить, как выглядит ваш кеш, запустив команду

: sysinfo

в браузере до и после выполнения ваших запросов.

И нет прямой настройки, чтобы сообщить neo4j что кешировать. То есть справедливо решается самим сервером.

Извините, у меня недостаточно очков репутации, чтобы оставить комментарий к вашему вопросу!

...