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

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

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


person Raining.    schedule 14.03.2020    source источник


Ответы (1)


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

Конкретный параметр, который вам нужно изменить,

dbms.memory.pagecache.size=1M 

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

:sysinfo

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

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

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

person blackrain    schedule 15.03.2020
comment
Я попробовал это, изменил настройку и перезапустил БД. Но я по-прежнему получаю result_available_after = 1ms для одного и того же запроса, выполняющегося несколько раз, за ​​исключением первого раза. - person Yashashvi; 24.03.2020