在mysql中通过以下查询,可获取到的正在执行sql事务,在OB中执行结果如图2,看不到具体的事务,有两类场景很不方便查看
1.影响查看存储过程执行的进展,因为看不出正在执行的sql事务,不利于目前存储过程执行到的位置;
2.对于某些耗时的sql事务,因为看不出正在执行的sql事务,看不出来事务id,不能kill掉指定的事务。
以上疑问,还麻烦老师帮我解答
select * from information_schema.INNODB_TRX;
在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展示的是整个集群中,未结束事务的参与者上下文信息,包括主机和备机。
ocp可以
上面别人贴的表,这个库下的:oceanbase.__all_virtual_trans_stat
show processlist 有没有兼容
根据文档库中的信息,对于您提到的问题,可以使用 OceanBase 提供的系统视图来获取当前正在执行的 SQL 事务信息。具体来说:
查看当前活跃事务
OceanBase 数据库提供了 __all_virtual_trans_stat
视图用于监控活跃事务,可以查询到当前还未结束的事务上下文状态。此视图展示的是整个集群中未结束事务的参与者上下文信息,包括主机和备机。
查看当前会话及SQL执行情况
GV$OB_SQL_AUDIT
视图可以查看SQL审计信息,包括正在执行的SQL语句及其相关信息。GV$SESSION_EVENT
视图可以查看会话级别的等待事件统计信息,有助于了解当前会话的状态。终止指定事务
如果需要终止某个特定的事务,可以通过 KILL
命令结合 GV$OB_SQL_AUDIT
中获取到的 trace_id
或者 session_id
来实现。例如:
KILL /*+ SESSION_ID('specific_session_id') */;
存储过程执行进展
对于存储过程中间状态的查看,虽然OceanBase不像MySQL那样直接提供类似INFORMATION_SCHEMA.INNODB_TRX
这样的视图,但可以通过上述提到的视图组合查询来间接了解存储过程内部SQL的执行情况。比如通过GV$OB_SQL_AUDIT
中的sql_text
字段匹配出属于该存储过程的SQL,并结合gv$session_event
等视图分析其执行进度。
综上所述,虽然OceanBase与MySQL在某些方面存在差异,但依然提供了丰富的工具和手段帮助用户监控和管理正在执行的SQL事务。希望以上信息能够解决您的疑问。如果有更进一步的需求或问题,请随时告知。
依据的文档名称及段落标题为:《分析 SQL 监控视图 → SQL 监控概述》以及《全链路追踪展示 → 通过命令行查看追踪信息》。
更多信息请查看: