You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查看所有未提交的事务列表?

查看未提交事务的方法

不同数据库查看未提交事务的方式略有不同,以下是主流数据库的实现方案:

PostgreSQL

通过pg_stat_activity系统视图可以查询所有未提交的事务:

SELECT pid, datname, usename, query, state, xact_start
FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active')
  AND xact_start IS NOT NULL;
  • idle in transaction:事务已开启但当前无执行语句的状态
  • active:事务内正在执行语句的状态
  • xact_start:事务的启动时间,可用于定位长时间未提交的事务

如果只想查看当前会话的未提交事务,先获取当前会话ID:

SELECT pg_backend_pid();

再代入上面的查询过滤pid即可。

MySQL

针对InnoDB引擎的事务,可查询INFORMATION_SCHEMA.INNODB_TRX系统表:

SELECT trx_id, trx_started, trx_mysql_thread_id, trx_query
FROM INFORMATION_SCHEMA.INNODB_TRX;
  • trx_query:事务内最后执行的SQL语句
  • trx_mysql_thread_id:对应会话的连接ID,可结合SHOW PROCESSLIST查看更多会话细节

查看当前会话的未提交事务,先获取当前连接ID:

SELECT CONNECTION_ID();

再过滤trx_mysql_thread_id即可。

SQL Server

通过sys.dm_tran_active_transactions动态管理视图查询活跃事务,可关联其他视图获取更多上下文信息:

SELECT 
    tat.transaction_id,
    tat.transaction_begin_time,
    des.login_name,
    dest.text AS last_executed_query
FROM sys.dm_tran_active_transactions tat
JOIN sys.dm_exec_sessions des ON tat.session_id = des.session_id
LEFT JOIN sys.dm_exec_requests der ON tat.session_id = der.session_id
CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) dest
WHERE tat.transaction_type != 2; -- 排除系统级事务
  • transaction_begin_time:事务启动时间
  • last_executed_query:事务内最后执行的SQL语句

内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:47:11