OB能否查询出当前正在执行的sql事务呢

在mysql中通过以下查询,可获取到的正在执行sql事务,在OB中执行结果如图2,看不到具体的事务,有两类场景很不方便查看
1.影响查看存储过程执行的进展,因为看不出正在执行的sql事务,不利于目前存储过程执行到的位置;
2.对于某些耗时的sql事务,因为看不出正在执行的sql事务,看不出来事务id,不能kill掉指定的事务。

以上疑问,还麻烦老师帮我解答

select * from information_schema.INNODB_TRX;

推荐试试敏捷诊断工具obdiag 的一键洞察,其中有事务查看的功能

obdiag display scene run --scene=observer.long_transaction --env wait_time=100

https://www.oceanbase.com/docs/common-obdiag-cn-1000000002200497

obclient -h -P -u -p
– 执行SQL查询
SELECT
session_id,
user,
client_ip,
client_port,
sql_id,
status,
start_time,
sql_text
FROM
oceanbase.__all_session
WHERE
status IN (‘ACTIVE’, ‘INACTIVE’); – 可以根据需要调整状态过滤条件

ocp上应该也有界面可以看到

__all_virtual_trans_stat,用于监控活跃事务,可以查询到当前还未结束的事务上下文状态。说明一下:__all_virtual_trans_stat展示的是整个集群中,未结束事务的参与者上下文信息,包括主机和备机。

1 个赞

ocp可以

上面别人贴的表,这个库下的:oceanbase.__all_virtual_trans_stat

show processlist 有没有兼容

@论坛小助手

根据文档库中的信息,对于您提到的问题,可以使用 OceanBase 提供的系统视图来获取当前正在执行的 SQL 事务信息。具体来说:

  1. 查看当前活跃事务

    OceanBase 数据库提供了 __all_virtual_trans_stat 视图用于监控活跃事务,可以查询到当前还未结束的事务上下文状态。此视图展示的是整个集群中未结束事务的参与者上下文信息,包括主机和备机。

  2. 查看当前会话及SQL执行情况

    • 使用 GV$OB_SQL_AUDIT 视图可以查看SQL审计信息,包括正在执行的SQL语句及其相关信息。
    • 使用 GV$SESSION_EVENT 视图可以查看会话级别的等待事件统计信息,有助于了解当前会话的状态。
  3. 终止指定事务

    如果需要终止某个特定的事务,可以通过 KILL 命令结合 GV$OB_SQL_AUDIT 中获取到的 trace_id 或者 session_id 来实现。例如:

    KILL /*+ SESSION_ID('specific_session_id') */;
    
  4. 存储过程执行进展

    对于存储过程中间状态的查看,虽然OceanBase不像MySQL那样直接提供类似INFORMATION_SCHEMA.INNODB_TRX这样的视图,但可以通过上述提到的视图组合查询来间接了解存储过程内部SQL的执行情况。比如通过GV$OB_SQL_AUDIT中的sql_text字段匹配出属于该存储过程的SQL,并结合gv$session_event等视图分析其执行进度。

综上所述,虽然OceanBase与MySQL在某些方面存在差异,但依然提供了丰富的工具和手段帮助用户监控和管理正在执行的SQL事务。希望以上信息能够解决您的疑问。如果有更进一步的需求或问题,请随时告知。

依据的文档名称及段落标题为:《分析 SQL 监控视图 → SQL 监控概述》以及《全链路追踪展示 → 通过命令行查看追踪信息》。

更多信息请查看:

  1. 实时执行计划展示
  2. 启用和关闭并行查询
  3. 分布式执行和并行查询
  4. 使用 systemd 部署 OceanBase 数据库
  5. 并行查询的执行
  6. OceanBase 术语
  7. 自动统计信息收集
  8. 查看节点
  9. 全链路追踪展示
  10. 分析 SQL 监控视图