事务命令

本页解释了 SHOW TRANSACTIONSTERMINATE TRANSACTIONS 命令。

SHOW TRANSACTIONS

SHOW TRANSACTIONS 命令用于显示实例中正在运行的事务。这也包括 fabric 事务。对于远程数据库别名,连接到远程数据库别名时运行 SHOW TRANSACTIONS 可以跟踪事务。

SHOW TRANSACTIONS 命令只返回默认输出。要获取完整输出,请使用可选的 YIELD 命令。完整输出:SHOW TRANSACTIONS YIELD *

此命令返回以下输出

表 1. 事务列表输出
描述 类型

database

事务正在执行的数据库名称。默认输出

STRING

transactionId

事务 ID。默认输出

STRING

currentQueryId

此事务中当前正在执行的查询 ID,如果没有查询正在执行,则为空 STRING默认输出

STRING

connectionId

附加到事务的数据库连接 ID,对于嵌入式连接,则为空 STRING默认输出

STRING

clientAddress

发出事务的连接的客户端地址,如果不可用,则为空 STRING默认输出

STRING

username

执行事务的用户用户名。默认输出

STRING

currentQuery

此事务中当前正在执行的查询文本,如果没有查询正在执行,则为空 STRING默认输出

STRING

startTime

事务开始时间。默认输出

STRING

status

事务的当前状态(TerminatedBlockedClosingRunning)。默认输出

STRING

elapsedTime

事务开始以来经过的时间。默认输出

DURATION

outerTransactionId

此事务的外部事务 ID,如果存在,否则为空 STRING。详情请参见 CALL { …​ } IN TRANSACTIONS

STRING

metaData

与事务关联的任何元数据,如果没有则为空映射。

MAP

parameters

一个映射,包含此事务中当前正在执行的查询所使用的所有参数,如果没有查询正在执行,则为空映射。

MAP

planner

用于规划此事务中当前正在执行的查询的 Cypher 规划器名称,如果没有查询正在执行,则为空 STRING。详情请参见 Cypher 规划器

STRING

runtime

此事务中当前正在执行的查询所使用的 Cypher 运行时名称,如果没有查询正在执行,则为空 STRING。详情请参见 Cypher 运行时

STRING

indexes

此事务中当前正在执行的查询所利用的索引,如果没有查询正在执行,则为空列表。

LIST<MAP>

currentQueryStartTime

此事务中当前正在执行的查询开始时间,如果没有查询正在执行,则为空 STRING

STRING

protocol

发出事务的连接所使用的协议。这不一定是互联网协议,例如 http 等,尽管也可能是。它也可能是“嵌入式”的,例如,如果此连接代表嵌入式会话。

STRING

requestUri

发出事务的客户端连接所使用的请求 URI,如果 URI 不可用,则为 null

STRING

currentQueryStatus

此事务中当前正在执行的查询的当前状态(parsingplanningplannedrunningwaiting),如果没有查询正在执行,则为空 STRING

STRING

statusDetails

提供来自底层事务的附加状态详细信息,如果不可用,则为空 STRING

STRING

resourceInformation

有关任何被阻塞事务的信息,如果没有则为空映射。

MAP

activeLockCount

事务持有的活动锁数量。

INTEGER

currentQueryActiveLockCount

此事务中当前正在执行的查询所持有的活动锁数量。

INTEGER

cpuTime

执行事务主动花费的 CPU 时间,如果不可用则为 null

DURATION

waitTime

等待获取锁所花费的等待时间。

DURATION

idleTime

此事务的空闲时间,如果不可用则为 null

DURATION

currentQueryElapsedTime

此事务中当前正在执行的查询开始以来经过的时间,如果没有查询正在执行,则为 null

DURATION

currentQueryCpuTime

此事务中当前正在执行的查询主动花费的 CPU 时间,如果不可用或没有查询正在执行,则为 null

DURATION

currentQueryWaitTime

此事务中当前正在执行的查询等待获取锁所花费的等待时间,如果没有查询正在执行,则为 null

DURATION

currentQueryIdleTime

此事务中当前正在执行的查询的空闲时间,如果不可用或没有查询正在执行,则为 null

DURATION

currentQueryAllocatedBytes

此事务中当前正在执行的查询迄今为止在堆上分配的字节数,如果不可用或没有查询正在执行,则为 null

INTEGER

allocatedDirectBytes

事务分配的堆外(原生)内存量(字节),如果不可用则为 null

INTEGER

estimatedUsedHeapMemory

事务分配的已用堆内存估计量(字节),如果不可用则为 null

INTEGER

pageHits

事务执行的页面缓存命中总数。

INTEGER

pageFaults

事务执行的页面缓存错误总数。

INTEGER

currentQueryPageHits

此事务中当前正在执行的查询执行的页面缓存命中总数。

INTEGER

currentQueryPageFaults

此事务中当前正在执行的查询执行的页面缓存错误总数。

INTEGER

initializationStackTrace

此事务的初始化堆栈跟踪,如果不可用则为空 STRING

STRING

SHOW TRANSACTIONS 命令可以与多个 SHOW TRANSACTIONSTERMINATE 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 值提供,或者作为解析为 STRINGLIST<STRING> 的表达式提供。

使用 RETURN 子句时,YIELD 子句是强制性的,不得省略。

具有 SHOW TRANSACTION 权限的用户可以根据权限授予查看当前正在执行的事务。所有用户都可以查看自己所有当前正在执行的事务。

列出所有事务

要使用默认输出列出所有可用事务,请使用 SHOW TRANSACTIONS 命令。如果需要所有输出,请使用 SHOW TRANSACTIONS YIELD *

查询
SHOW TRANSACTIONS
表 2. 结果
database transactionId currentQueryId connectionId clientAddress username currentQuery startTime status elapsedTime

"neo4j"

"neo4j-transaction-6"

"query-664"

""

""

""

"SHOW TRANSACTIONS"

"2022-06-14T10:02:45.568Z"

"Running"

PT0.038S

"neo4j"

"neo4j-transaction-4"

"query-663"

""

""

""

"MATCH (n) RETURN n"

"2022-06-14T10:02:45.546Z"

"Running"

PT0.06S

行数: 2

带输出过滤的事务列表

列出的事务可以使用 WHERE 子句进行过滤。例如,获取当前正在执行的查询包含 'Mark' 的所有事务的数据库。

查询
SHOW TRANSACTIONS YIELD database, currentQuery WHERE currentQuery contains 'Mark'
表 3. 结果
database currentQuery

"neo4j"

"MATCH (p:Person) WHERE p.name='Mark' RETURN p"

"neo4j"

"SHOW TRANSACTIONS YIELD database, currentQuery WHERE currentQuery contains 'Mark'"

行数: 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
表 4. 结果
txId elapsedTimeMillis cpuTimeMillis waitTimeMillis idleTimeSeconds currentQueryElapsedTimeMillis currentQueryCpuTimeMillis currentQueryWaitTimeMicros currentQueryIdleTimeSeconds

"neo4j-transaction-5"

1055

767

0

0

1012

767

0

0

"neo4j-transaction-9"

156

155

0

0

97

97

0

0

"neo4j-transaction-4"

1082

17

0

1

1013

17

0

0

行数: 3

列出特定事务

可以通过事务 ID 指定要返回列表中的哪些事务。

查询
SHOW TRANSACTIONS "neo4j-transaction-3"
表 5. 结果
database transactionId currentQueryId connectionId clientAddress username currentQuery startTime status elapsedTime

"neo4j"

"neo4j-transaction-3"

"query-1"

""

""

""

"MATCH (n) RETURN n"

"2021-10-20T08:29:39.423Z"

"Running"

PT2.603S

行数: 1

TERMINATE TRANSACTIONS

TERMINATE TRANSACTIONS 命令用于通过事务 ID 终止正在运行的事务。

TERMINATE TRANSACTIONS 命令的输出在默认输出和完整输出(YIELD *)之间没有区别,所有输出都是默认的。

此命令返回以下输出

表 6. 终止事务输出
描述 类型

transactionId

事务 ID。

STRING

username

执行事务的用户用户名。

STRING

message

TERMINATE TRANSACTION 命令应用于此事务的结果。

STRING

TERMINATE TRANSACTIONS 命令可以与多个 SHOW TRANSACTIONSTERMINATE 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 值提供,或者作为解析为 STRINGLIST<STRING> 的表达式提供。

使用 WHERERETURN 子句时,YIELD 子句是强制性的,不得省略。

具有 TERMINATE TRANSACTION 权限的用户可以根据权限授予终止事务。所有用户都可以终止自己当前正在执行的事务。

终止事务

要终止正在运行的事务而不等待它们自行完成,请使用 TERMINATE TRANSACTIONS 命令。

查询
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
表 7. 结果
transactionId username message

"neo4j-transaction-1"

"neo4j"

"事务已终止。"

"neo4j-transaction-2"

null

"未找到事务。"

行数: 2

带输出过滤的终止事务

TERMINATE TRANSACTIONS 命令的输出可以使用 YIELDWHERE 子句进行过滤。

示例 1. TERMINATE TRANSACTION YIELD

例如,返回未终止事务的事务 ID 和消息。

查询
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
YIELD transactionId, message
WHERE message <> "Transaction terminated."
表 8. 结果
transactionId message

"neo4j-transaction-2"

"未找到事务。"

行数: 1

示例 2. TERMINATE TRANSACTION 错误

SHOW TRANSACTIONS 不同,TERMINATE TRANSACTIONS 不允许在没有 YIELD 的情况下使用 WHERE

查询
TERMINATE TRANSACTIONS "neo4j-transaction-1","neo4j-transaction-2"
WHERE message <> "Transaction terminated."
错误消息
`WHERE` is not allowed by itself, please use `TERMINATE TRANSACTION ... YIELD ... WHERE ...`

组合事务命令

与其他 show 命令不同,SHOWTERMINATE TRANSACTIONS 命令可以在同一个查询中组合使用。

组合多个命令时,YIELDRETURN 子句是强制性的,不得省略。此外,不允许使用 YIELD *。相反,YIELD 子句需要显式列出生成的列。

目前,不允许将其他 Cypher 子句与事务命令结合使用。

终止给定用户的所有事务

要终止某个用户的所有事务,首先使用 SHOW TRANSACTIONS 查找事务,然后将它们传递给 TERMINATE TRANSACTIONS

示例 3. TERMINATE TRANSACTIONS
查询
SHOW TRANSACTIONS
YIELD transactionId AS txId, username AS user
WHERE user = "Alice"
TERMINATE TRANSACTIONS txId
YIELD message
RETURN txId, message
表 9. 结果
txId message

"neo4j-transaction-1"

"事务已终止。"

"neo4j-transaction-2"

"事务已终止。"

行数: 2

终止饥饿事务

要终止等待超过 30 分钟的事务,首先使用 SHOW TRANSACTIONS 查找事务,然后将它们传递给 TERMINATE TRANSACTIONS

示例 4. TERMINATE TRANSACTIONS

以下示例显示了一个已等待 40 分钟的事务。

查询
SHOW TRANSACTIONS
YIELD transactionId, waitTime
WHERE waitTime > duration({minutes: 30})
TERMINATE TRANSACTIONS transactionId
YIELD username, message
RETURN *
表 10. 结果
transactionId waitTime username message

"neo4j-transaction-1"

PT40M

"Alice"

"事务已终止。"

行数: 1

列出同一用户已终止的其他事务

要列出事务已被终止的用户所剩下的事务,首先使用 TERMINATE TRANSACTIONS 终止事务,然后通过 SHOW TRANSACTIONS 过滤用户。

示例 5. TERMINATE 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
表 11. 结果
txId user database currentQuery

"neo4j-transaction-3"

"Alice"

"neo4j"

"MATCH (n) RETURN n"

"mydb-transaction-1"

"Bob"

"mydb"

"MATCH (n:Label) SET n.prop=false"

"system-transaction-999"

"Bob"

"system"

"SHOW DATABASES"

行数: 2

列出与给定事务相同用户的其他事务

要列出与给定事务相同用户的其他事务,首先使用 SHOW TRANSACTIONS 查找事务,然后通过第二个 SHOW TRANSACTIONS 过滤用户。

示例 6. 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
表 12. 结果
txId user database currentQuery status

"mydb-transaction-1"

"Bob"

"mydb"

"MATCH (n:Label) SET n.prop=false"

"Running"

"system-transaction-999"

"Bob"

"system"

"SHOW DATABASES"

"Running"

行数: 2