事务管理
事务
访问图、索引或模式的数据库操作都在事务中执行,以确保 ACID 特性。事务是单线程的、受限的且独立的。可以在单个线程中启动多个事务,它们彼此独立。
使用事务的交互周期遵循以下步骤:
-
开始一个事务。
-
执行数据库操作。
-
提交或回滚事务。
完成每个事务至关重要,因为事务获取的锁或内存仅在完成时才会释放。作为语句结束时资源清理的一部分,所有未提交的事务都会被回滚。对于明确提交或回滚的事务,不需要进行资源清理,此时关闭事务是一个空操作。
|
事务中执行的所有修改都会保留在内存中。这意味着非常大的更新必须拆分为多个事务,以避免内存耗尽。 |
配置事务行为
事务设置有助于管理数据库中的事务,例如事务超时时间、并发运行的事务最大数量、允许 Neo4j 等待正在运行的事务完成以继续进行数据库关闭操作的时间等。有关所有可用设置,请参阅 事务设置。
配置并发运行事务的最大数量
默认情况下,Neo4j 最多可运行 1000 个并发事务。要更改此值,请使用 db.transaction.concurrent.maximum 设置。如果设置为 0,则禁用此限制。
配置事务超时
建议配置 Neo4j 以终止执行时间超过所配置超时时间的事务。
-
将
db.transaction.timeout设置为一个正的时间间隔值(例如10s),即默认事务超时时间。将db.transaction.timeout设置为0(这是默认值)将禁用此功能。 -
您还可以使用过程
dbms.setConfigValue('db.transaction.timeout','10s')在每个主服务器上动态设置此值。
将超时时间设置为十秒。
db.transaction.timeout=10s
配置事务超时不会影响使用自定义超时(例如通过 Java API 或 Neo4j 驱动程序)执行的事务,因为自定义超时会覆盖为 db.transaction.timeout 设置的值。自定义超时可以设置为任何值,甚至可以大于 db.transaction.timeout 所配置的值。
管理事务
可以使用 Cypher 命令 SHOW TRANSACTIONS 和 TERMINATE TRANSACTIONS 来管理事务。TERMINATE TRANSACTIONS 命令可以在同一个查询中与多个 SHOW TRANSACTIONS 和 TERMINATE TRANSACTIONS 命令组合使用。
有关更多信息,请参阅 Cypher 手册 → 事务命令。