事务管理

事务

访问图、索引或模式的数据库操作在事务中执行,以确保 ACID 属性。事务是单线程、受限且独立的。单个线程中可以启动多个事务,并且它们彼此独立。

事务工作交互周期遵循以下步骤:

  1. 开始一个事务。

  2. 执行数据库操作。

  3. 提交或回滚事务。

完成每个事务至关重要,因为事务获取的或内存只会在完成后释放。所有未提交的事务都会在语句结束时作为资源清理的一部分回滚。对于已明确提交或回滚的事务,不需要进行资源清理,事务关闭是一个空操作。

事务中执行的所有修改都保留在内存中。这意味着非常大的更新必须分成多个事务,以避免内存耗尽。

配置事务行为

事务设置可帮助您管理数据库中的事务,例如事务超时、并发运行事务的最大数量、允许 Neo4j 等待正在运行的事务完成所需的时间(在允许启动的数据库关闭继续之前)等。有关所有可用设置,请参阅事务设置

配置并发运行事务的最大数量

默认情况下,Neo4j 最多可以运行 1000 个并发事务。要更改此值,请使用db.transaction.concurrent.maximum 设置。如果设置为 0,则禁用此限制。

配置事务超时

建议配置 Neo4j 以终止执行时间超过配置超时的事务。

  • db.transaction.timeout 设置为某个正的时间间隔值(例如,10s),表示默认事务超时。将 db.transaction.timeout 设置为 0 — 这是默认值 — 将禁用此功能。

  • 您还可以使用过程 dbms.setConfigValue('db.transaction.timeout','10s') 在每个主服务器上动态设置此值。

示例 1. 配置事务超时

将超时设置为十秒。

db.transaction.timeout=10s

配置事务超时不会影响使用自定义超时(例如,通过 Java API 或 Neo4j 驱动程序)执行的事务,因为自定义超时会覆盖为 db.transaction.timeout 设置的值。自定义超时可以设置为任何值,甚至可以大于 db.transaction.timeout 配置的值。

管理事务

可以使用 Cypher 命令 SHOW TRANSACTIONSTERMINATE TRANSACTIONS 来管理事务。TERMINATE TRANSACTIONS 命令可以与同一查询中的多个 SHOW TRANSACTIONSTERMINATE TRANSACTIONS 命令结合使用。

有关更多信息,请参阅Cypher 手册 → 事务命令

© . All rights reserved.