租户长事务怎么处理

请问社区的各位老师,怎么根据长事务告警的事务id,去看对应事务执行的sql语句?如果事务一直不提交,会导致memstore写满吗?如何判断是业务侧不提交事务导致的长事务,还是OB数据库的机制导致的长事务。已经得知ob_query_timeout 为5小时,ob_trx_timeout为200小时

1 个赞

长事务期间,查对应的会话id,select * from __all_virtual_processlist where id=会话id;会话状态为sleep,这是监控采集有问题吗;告警8小时后(大于wait_timeout),长事务自动消失

1 个赞

查询GV$OB_SQL_AUDIT这个表
事务不提交,会导致clog写满,memstore影响不大
会话状态为sleep,说明没有sql执行,只是客户端一直连接着,默认超过wait_timeout之后,服务端会kill这个连接

2 个赞

告警点进去,就能看到transaction_hash,根据这个id去GV$OB_SQL_AUDIT里找具体事务涉及的sql。分析事务sql,能优化就优化,不能就把告警阈值调高。

1 个赞

从OB_SQL_AUDIT找不到对应的SQL

ob长事务应该是涉及到的日志大小吧,ocp告警点进去,能看到告警原因,这个告警项如何定义,如何处理

官网上有的都试过了,主要是无法根据事务id拿到对应的SQL;我们这边也有商用版本,商用OCP长事务点事务id能看到该事务执行的sql操作

商用OCP 采集了长事务对应的 sql_audit,所以能看到

sql不执行完,不会进入sql_audit

这种一直长事务告警,会话还是sleep的,sql也没执行完,好像对不起来啊

如果没有执行完,可以查看GV$OB_PROCESSLIST视图


https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001699168

1 个赞