描述:
如何查看當前數據庫中是否有事務在回滾, 如果有, 具體是哪條 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重連