I am currently working with the 4.4.0 version of the Neo4j Desktop, on mac of version 11.6.2.
I have been able to load 1.24M nodes and am now trying to load the associated 3.1M relationships.
I have tried loading them with the following command
:auto USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS
FROM "file:///2022-01-05_seattle_users_relationships.csv" as row
MATCH (follower:user {id:row.user_id})
MATCH (followed:user {id:row.follows_id})
MERGE (follower)-[r:FOLLOWS]->(followed)
ON CREATE SET
r.age=row.relationship_age
but am getting the following error:
Neo.TransientError.Transaction.MaximumTransactionLimitReached
Unable to start new transaction since limit of concurrently executed transactions is reached. See setting dbms.transaction.concurrent.maximum
I also tried running the same command with smaller files (500k relationships per file). The first 2 were processed properly, but the 3rd one showed the same error.
I tried looking for the dbms.transaction.concurrent.maximum field in the neo4j.conf file, but could not find it.
Could you please let me know if I should add that field to that file? And if so, what value I should assign to it? if not that, could you let me know how I could solve this problem?
If that can help, the rows in my relationship file look like the below:
We wouldn't expect to see that error unless there are other transactions executing, maybe you started additional transactions that are still executing?
Also, please provide an EXPLAIN plan of the query. You will want to make sure you have an index or unique constraint on :user(id) to support fast matching.
Yes, I had run CREATE CONSTRAINT ON (u:user) ASSERT u.id IS UNIQUE; before anything else.
The only thing I had run aside from that was the import of the nodes:
:auto USING PERIODIC COMMIT 5000
LOAD CSV WITH HEADERS
FROM "file:///2022-01-05_seattle_users_and_followers.csv" as row
MERGE (u: user {id:row.user_id})
I only executed the import of the relationships once all nodes had been fully imported.
I am sorry, but I am not sure how to run an EXPLAIN or PROFILE on a query that starts with :auto. I tried running
PROFILE <-- I also tried EXPLAIN
:auto USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS
FROM "file:///2022-01-05_seattle_users_relationships.csv" as row
MATCH (follower:user {id:row.user_id})
MATCH (followed:user {id:row.follows_id})
MERGE (follower)-[r:FOLLOWS]->(followed)
ON CREATE SET
r.age=row.relationship_age
but am getting a syntax error.
Is there another way of running the EXPLAIN plan you could recommend?
Try placing the PROFILE after the :auto. :auto is not actually Cypher, it's a command that is interpreted by the browser so it knows to execute the query a certain way to the server.
Ah, ok. Thank you for your suggestion, and for explaining.
I tried
:auto PROFILE USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS
FROM "file:///2022-01-05_seattle_users_relationships.csv" as row
MATCH (follower:user {id:row.user_id})
MATCH (followed:user {id:row.follows_id})
MERGE (follower)-[r:FOLLOWS]->(followed)
ON CREATE SET
r.age=row.relationship_age
but got the same error:
Neo.TransientError.Transaction.MaximumTransactionLimitReached
Unable to start new transaction since limit of concurrently executed transactions is reached. See setting dbms.transaction.concurrent.maximum
I have no other neo4j operation running. This is the first command I ran, after starting this DBMS again (in which I had already run the CONSTRAINT command and had already loaded all my nodes).