事务命令
本页面介绍了 SHOW TRANSACTIONS 和 TERMINATE TRANSACTIONS 命令。
SHOW TRANSACTIONS
SHOW TRANSACTIONS 命令用于显示实例中正在运行的事务。这也包括 Fabric 事务。对于远程数据库别名,可以通过连接到该远程数据库别名并运行 SHOW TRANSACTIONS 来跟踪其事务。
|
|
此命令返回以下输出
| 列 | 描述 | 类型 |
|---|---|---|
|
事务执行所在的数据库名称。默认输出 |
|
|
事务 ID。默认输出 |
|
|
当前在此事务中执行的查询 ID,如果当前没有查询正在执行,则为 |
|
|
附加到该事务的数据库连接 ID,对于嵌入式连接,则为空 |
|
|
发出该事务的连接的客户端地址,如果不可用,则为 |
|
|
执行该事务的用户的用户名。默认输出 |
|
|
当前在此事务中执行的查询文本,如果当前没有查询正在执行,则为 |
|
|
事务开始的时间。默认输出 |
|
|
事务的当前状态( |
|
|
事务开始后经过的时间。默认输出 |
|
|
该事务的外部事务 ID(如果存在),否则为 |
|
|
与事务关联的任何元数据,如果没有则为空映射。 |
|
|
包含当前在此事务中执行的查询所使用的所有参数的映射,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询所使用的 Cypher 规划器名称,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询所使用的 Cypher 运行时名称,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询所利用的索引,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询开始的时间,如果当前没有查询正在执行,则为 |
|
|
发出该事务的连接所使用的协议。这不一定是指互联网协议(例如 http 等),尽管它也可能是。例如,如果此连接代表嵌入式会话,它也可能是“embedded”。 |
|
|
发出该事务的客户端连接所使用的请求 URI,如果 URI 不可用,则为 |
|
|
当前在此事务中执行的查询的当前状态( |
|
|
提供来自底层事务的其他状态详细信息,如果不可用,则为空 |
|
|
有关任何阻塞事务的信息,如果没有,则为空映射。 |
|
|
该事务持有的活动锁数量。 |
|
|
当前在此事务中执行的查询所持有的活动锁数量。 |
|
|
执行该事务实际消耗的 CPU 时间,如果不可用,则为 |
|
|
等待获取锁所花费的时间。 |
|
|
此事务的空闲时间,如果不可用,则为 |
|
|
当前在此事务中执行的查询开始后经过的时间,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询实际消耗的 CPU 时间,如果不可用或当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询为获取锁而等待的时间,如果当前没有查询正在执行,则为 |
|
|
当前在此事务中执行的查询的空闲时间,如果不可用或当前没有查询正在执行,则为 |
|
|
到目前为止,当前在此事务中执行的查询在堆上分配的字节数,如果不可用或当前没有查询正在执行,则为 |
|
|
该事务分配的堆外(原生)内存量(以字节为单位),如果不可用,则为 |
|
|
该事务使用的估计堆内存量(以字节为单位),如果不可用,则为 |
|
|
该事务执行的页面缓存命中总数。 |
|
|
该事务执行的页面缓存失效(缺页)总数。 |
|
|
当前在此事务中执行的查询执行的页面缓存命中总数。 |
|
|
当前在此事务中执行的查询执行的页面缓存失效总数。 |
|
|
该事务的初始化堆栈跟踪,如果不可用,则为空 |
|
|
一个映射,包含当前在此事务中执行的查询所做数据修改的实时指标;如果当前事务是内部查询,则为 null。内部查询所做的数据修改指标会在提交时聚合到其外部查询中。仅限 Cypher 25 Neo4j 2026.03 中引入 |
|
-
nodesCreated创建的节点总数。 -
nodesDeleted删除的节点总数。 -
relationshipsCreated创建的关系总数。 -
relationshipsDeleted删除的关系总数。 -
propertiesSet设置的属性总数。 -
labelsAdded添加的标签总数。 -
labelsRemoved移除的标签总数。 -
fileLinesRead读取的 CSV 文件行总数。 -
transactionsStarted如果该查询是外部事务,则为 CIT 查询启动的内部事务总数,否则为 null。有关详细信息,请参阅CALL { … } IN TRANSACTIONS。 -
transactionsCommitted如果该查询是外部事务,则为 CIT 查询提交的内部事务总数,否则为 null。有关详细信息,请参阅CALL { … } IN TRANSACTIONS。 -
transactionsRolledBack如果该查询是外部事务,则为 CIT 查询回滚的内部事务总数,否则为 null。有关详细信息,请参阅CALL { … } IN TRANSACTIONS。
SHOW TRANSACTIONS 命令可以与多个 SHOW TRANSACTIONS 和 TERMINATE TRANSACTIONS 命令结合使用,请参阅 事务命令组合。
语法
|
有关语法说明的更多详情,可查看 此处。 |
- 列出当前服务器上的事务
SHOW TRANSACTION[S] [transaction-id[,...]]
[YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
[WHERE expression]
[RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
transaction-id 的格式为 <databaseName>-transaction-<id>。事务 ID 必须以一个或多个逗号分隔的引号括起来的 STRING 值提供,或作为解析为 STRING 或 LIST<STRING> 的表达式提供。
|
使用 |
拥有 SHOW TRANSACTION 权限的用户可以根据权限授予查看当前正在执行的事务。所有用户都可以查看自己当前正在执行的所有事务。
列出所有事务
要列出所有带有默认输出的可用事务,请使用 SHOW TRANSACTIONS 命令。如果需要所有输出,请使用 SHOW TRANSACTIONS YIELD *。
SHOW TRANSACTIONS
| database | transactionId | currentQueryId | 连接 ID (connectionId) | 客户端地址 (clientAddress) | username | currentQuery | startTime | 状态 (status) | elapsedTime |
|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行:2 |
|||||||||
根据输出过滤来列出事务
可以使用 WHERE 子句过滤列出的事务。例如,获取当前执行的查询包含 'Mark' 的所有事务的数据库:
SHOW TRANSACTIONS YIELD database, currentQuery WHERE currentQuery contains 'Mark'
| database | currentQuery |
|---|---|
|
|
|
|
行:2 |
|
多个输出具有 duration 类型,可能难以阅读。它们可以以更易读的格式返回:
SHOW TRANSACTIONS
YIELD transactionId, elapsedTime, cpuTime, waitTime, idleTime,
currentQueryElapsedTime, currentQueryCpuTime, currentQueryWaitTime, currentQueryIdleTime
RETURN
transactionId AS txId,
elapsedTime.milliseconds AS elapsedTimeMillis,
cpuTime.milliseconds AS cpuTimeMillis,
waitTime.milliseconds AS waitTimeMillis,
idleTime.seconds AS idleTimeSeconds,
currentQueryElapsedTime.milliseconds AS currentQueryElapsedTimeMillis,
currentQueryCpuTime.milliseconds AS currentQueryCpuTimeMillis,
currentQueryWaitTime.microseconds AS currentQueryWaitTimeMicros,
currentQueryIdleTime.seconds AS currentQueryIdleTimeSeconds
| txId | elapsedTimeMillis | cpuTimeMillis | waitTimeMillis | idleTimeSeconds | currentQueryElapsedTimeMillis | currentQueryCpuTimeMillis | currentQueryWaitTimeMicros | currentQueryIdleTimeSeconds |
|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行:3 |
||||||||
列出特定事务
可以通过事务 ID 指定要在列表中返回哪些事务。
SHOW TRANSACTIONS "neo4j-transaction-3"
| database | transactionId | currentQueryId | 连接 ID (connectionId) | 客户端地址 (clientAddress) | username | currentQuery | startTime | 状态 (status) | elapsedTime |
|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行:1 |
|||||||||
TERMINATE TRANSACTIONS
TERMINATE TRANSACTIONS 命令用于按 ID 终止正在运行的事务。
|
对于 |
此命令返回以下输出
| 列 | 描述 | 类型 |
|---|---|---|
|
事务 ID。 |
|
|
执行该事务的用户的用户名。 |
|
|
应用于此事务的 |
|
TERMINATE TRANSACTIONS 命令可以与多个 SHOW TRANSACTIONS 和 TERMINATE TRANSACTIONS 命令结合使用,请参阅 事务命令组合。
语法
|
有关语法说明的更多详情,可查看 此处。 |
- 按 ID 终止当前服务器上的事务
TERMINATE TRANSACTION[S] transaction_id[, ...]
[YIELD { * \| field[, ...] }
[ORDER BY field[, ...]]
[SKIP n]
[LIMIT n]
[WHERE expression]
[RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
]
transaction-id 的格式为 <databaseName>-transaction-<id>。事务 ID 必须以一个或多个逗号分隔的引号括起来的 STRING 值提供,或作为解析为 STRING 或 LIST<STRING> 的表达式提供。
|
使用 |
拥有 TERMINATE TRANSACTION 权限的用户可以根据权限授予终止事务。所有用户都可以终止自己当前正在执行的事务。
终止事务
要结束正在运行的事务而不等待它们自行完成,请使用 TERMINATE TRANSACTIONS 命令。
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
| transactionId | username | message |
|---|---|---|
|
|
|
|
|
|
行:2 |
||
根据输出过滤来终止事务
TERMINATE TRANSACTIONS 命令的输出可以使用 YIELD 和 WHERE 子句进行过滤。
例如,返回未终止的事务的 ID 和消息。
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
YIELD transactionId, message
WHERE message <> "Transaction terminated."
| transactionId | message |
|---|---|
|
|
行:1 |
|
与 SHOW TRANSACTIONS 不同,TERMINATE TRANSACTIONS 不允许在没有 YIELD 的情况下使用 WHERE。
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
WHERE message <> "Transaction terminated."
42N84: 错误: 语法错误或访问规则违规 - TERMINATE TRANSACTION 缺少 YIELD 子句。WHERE 子句缺少 YIELD 子句。请使用 'TERMINATE TRANSACTION … YIELD … WHERE …'。 |
组合事务命令
与其他 show 命令不同,SHOW 和 TERMINATE TRANSACTIONS 命令可以在同一个查询中组合使用。
|
组合多个命令时, |
|
目前,不允许将其他 Cypher 子句与事务命令结合使用。 |
终止特定用户的所有事务
要终止某个用户的所有事务,请首先使用 SHOW TRANSACTIONS 查找这些事务,然后将它们传给 TERMINATE TRANSACTIONS。
SHOW TRANSACTIONS
YIELD transactionId AS txId, username AS user
WHERE user = "Alice"
TERMINATE TRANSACTIONS txId
YIELD message
RETURN txId, message
| txId | message |
|---|---|
|
|
|
|
行:2 |
|
终止处于饥饿状态(长时间等待)的事务
要终止已等待超过 30 分钟的事务,请首先使用 SHOW TRANSACTIONS 查找这些事务,然后将它们传给 TERMINATE TRANSACTIONS。
以下示例显示了一个已等待 40 分钟的事务。
SHOW TRANSACTIONS
YIELD transactionId, waitTime
WHERE waitTime > duration({minutes: 30})
TERMINATE TRANSACTIONS transactionId
YIELD username, message
RETURN *
| transactionId | waitTime | username | message |
|---|---|---|---|
|
|
|
|
行:1 |
|||
列出同一用户被终止的其他事务
要列出其事务被终止的用户的剩余事务,请首先使用 TERMINATE TRANSACTIONS 终止事务,然后通过 SHOW TRANSACTIONS 筛选用户。
TERMINATE TRANSACTION 'neo4j-transaction-1', 'neo4j-transaction-2'
YIELD username AS terminatedUser
SHOW TRANSACTIONS
YIELD username AS showUser, transactionId AS txId, database, currentQuery, status
WHERE showUser = terminatedUser AND NOT status STARTS WITH 'Terminated'
RETURN txId, showUser AS user, database, currentQuery
| txId | user(用户) | database | currentQuery |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
行:2 |
|||
列出与给定事务同一用户的其他事务
要列出与给定事务同一用户的其他事务,请首先使用 SHOW TRANSACTIONS 查找事务,然后通过第二个 SHOW TRANSACTIONS 筛选用户。
SHOW TRANSACTION 'neo4j-transaction-1'
YIELD username AS originalUser, transactionId AS originalTxId
SHOW TRANSACTIONS
YIELD username AS newUser, transactionId AS txId, database, currentQuery, status
WHERE newUser = originalUser AND NOT txId = originalTxId
RETURN txId, newUser AS user, database, currentQuery, status
| txId | user(用户) | database | currentQuery | 状态 (status) |
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行:2 |
||||