描述:
如何查看当前数据库中是否有事务在回滚, 如果有, 具体是哪条 SQL 在回滚?
解决办法:
方法1: 通过 onstat -u|grep RP; 可以获取相关的 sessionid。 通过 onstat -g ses sid 获取 SQL;
方法2: 通过 onstat -x|grep "A-R"; 可以定位到 userthread, 例如 "686cb9e8", 然后通过
onstat -u|grep "686cb9e8" 获取到 sessionid; onstat -x 输出中的 rb_time 表示回滚的剩余时间。
案例:
描述:gbase在线,在gbase服务器里面能正常访问gbase,但是用工具程序就访问不了,gbase服务是online状态,存储空间也是够的,这是gbase日志
如图
经过上面的分析:长事务到达高水位之后,事务即将挂起,长事务回滚完之后,挂起的事务没断开,也没发起重连,导致gds和应用也连不上,onmode -z sid杀掉挂起的事务,让session重连