Есть ли способ показать план выполнения cypher?
Я видел тему (Понимание ключевого слова и плана выполнения Neo4j Cypher Profile), где упоминается ключевое слово профиля.
Я не мог использовать его в сообществе Neo4j 2.0.0RC1.
Питер написал, что он не полностью реализован.
Будет ли он поддерживаться?
Я имею в виду, было бы интересно наблюдать за изменениями плана, когда мы настраиваем запрос...
Ответы
Ответ 1
Вы все еще можете найти оболочку neo4j, где вы можете запустить команду profile
.
Либо подключившись к работающему серверу, запустив bin/neo4j-shell
Или, перейдя на старый веб-ui в информационном меню "(i)" с левой стороны и выбрав самую нижнюю ссылку "webadmin" → http://localhost:7474/webadmin
Информация о профилировании будет добавлена позднее в браузер, когда ее будет легче читать и понимать.
Ответ 2
В соответствии с Neo4j 2.2 имеются дополнительные средства для профилирования. Некоторые функции, доступные только через neo4j-shell или конечные точки REST, теперь доступны также в Neo4j-браузере, а некоторые функции новы вообще.
Теперь вы можете использовать команду PROFILE
с вашим запросом cypher непосредственно в Neo4j-браузере, чтобы выполнить запрос и посмотреть визуализацию плана выполнения.
PROFILE
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)
-------------
n.bar ID(n)
Mary 951
![Cypher 2.2 profile]()
Кроме того, теперь вы можете проверить план запроса, не выполняя его, например, для проверки запроса, который изменит базу данных. Сделайте это с помощью команды EXPLAIN
, добавленной к запросу. См. 15.2 Как профилировать запрос? из документации.
EXPLAIN
MATCH (n:Peter {foo: 'Paul'})
SET n.foo = 'Mary', n.bar = 'Paul'
RETURN n.foo, ID(n)
------------------------------------------
// Nothing returned, query is not executed
![Cypher 2.2 explain]()
Связанная новая функция - это также новый планировщик запросов на основе затрат, а также возможность принудительно использовать либо планировщик запросов, основанный на затратах, либо планировщик запросов на основе правил для всех запросов или для любого конкретного запроса, В документации отмечается, что не все запросы могут быть разрешены планировщиком запросов на основе затрат, и в этом случае параметр будет проигнорирован и используется планировщик на основе правил. См. 15.1 Как выполняются запросы?
Чтобы принудительно использовать любой планировщик запросов для всех запросов, установите параметр конфигурации query.planner.version
в conf/neo4j.properties
(сервер Neo4j) или вызовите метод .setConfig()
на свой объект GraphDatabaseService
(встроенный Neo4j). Установите его на COST
или RULE
, и для принятия решения о том, какой планировщик запросов использовать обратно в Neo4j, установите его на default
(или полностью удалите настройку). См. 24.5 Настройки конфигурации, Запуск встроенной базы данных с настройками конфигурации.
Чтобы принудительно использовать любой планировщик запросов для конкретного запроса, добавьте запрос с помощью CYPHER planner=cost
или CYPHER planner=rule
. См. 15.1 Как выполняются запросы?
CYPHER planner=cost
MATCH (n:Peter {foo: 'Paul'})
RETURN n.bar, ID(n)
Вы можете запросить PROFILE
или EXPLAIN
с помощью любого из планировщиков запросов и увидеть различия в том, как они реализуют ваши запросы.
Для справки, описывающего план выполнения, см. соответствующую главу документации 16. Планы выполнения.