Транзакция Neo4j выполняется вечно с пустым запросом - PullRequest
0 голосов
/ 28 марта 2019

Мы используем neo4j и py2neo для выполнения запросов шифрования для выполнения любых операций обновления или чтения neo4j.

Недавно мы столкнулись с проблемой, при которой все запросы шифров не будут выполняться, поэтому попытались найти все транзакции в neo4j, используя CALL dbms.listTransactions(), и выяснить причину этого - транзакции, которые получили значительное количество блокировок и которые не связан ни с одним запросом, плюс эта транзакция выполняется с часов.

В части кода я всегда проверяю, чтобы в конце транзакция не оставалась открытой, даже если в запросе шифра или любой другой части кода было какое-либо исключение, я откатываю транзакцию, чтобы полученные блокировки могли быть сняты.

Ниже приведен скриншот запроса списка транзакций: -

enter image description here

Как видно, query-2 заблокирован вышеупомянутой транзакцией.

Теперь я знаю, что могу использовать neo.conf, чтобы ограничить время для транзакции, но я не большой поклонник этого, так как иногда это может привести к неправильному завершению транзакции, плюс очень важно выяснить и решить, что это за транзакция с ни о каком запросе и как можно позаботиться.

Эта транзакция сбрасывается только тогда, когда мы перезапускаем сервер neo4j и через некоторое время она появляется снова.

Ниже приведен очень грубый фрагмент кода для создания, фиксации и отката транзакции neo4j.

 graph_obj = Graph(host=neo4j_auth_obj["host"], port=neo4j_auth_obj["port"],
              user=neo4j_auth_obj["user_name"], password=neo4j_auth_obj["password"])

neo_transaction = graph_obj.begin()

try:
    cypher_query = "a valid cypher query"
    neo_transaction.run(cypher_query)
    neo_transaction.commit()
except Exception:
    neo_transaction.rollback()

О чем может быть эта пустая транзакция?

...