꽤 트랜잭션이 컸던 사이트에서 나타난 현상인데 오라클 디비와 연관된 어플 서버가 다운되어 SMON이 롤백을 하는데 6시간이 걸려도 롤백이 되지 않는 현상이 있었다.

롤백이 아직 되지 않았기 때문에 특정 테이블들이 row lock 상태여서 update가 되지 않아 업무를 진행할 수 없다는게 제일 큰 여파였다.

 

그런데 답답하게도 v$lock이나 v$fast_start_recovery 뷰에 참고할만한 정보가 없다는 특징도 있다.

세션이 예기치 못하게 끊겼을 경우 SMON은 OS의 프로세스를 정리하면서 언두 엔트리를 참고해 롤백하게 되는데

v$session에서는 이미 세션이 끊겼기에 정보가 없으나 OS의 process는 보이는 상황이라고 추정된다.

 

RAC 2node 환경이었는데 결국엔 DB를 shutdown abort하고 재시작한 후 lock이 풀렸음을 확인했다.

 

어쨋든 Cleanup이라는 과정을 SMON이나 PMON이 진행하는데 기본값으로 60초에 한번씩 _rollback_cleanup_entreis 라는 파라미터의 값만큼 언두 엔트리를 클린업하게 된다.

기본값이 20이기때문에 만약 1000개의 언두 엔트리를 정리해야 한다면 50분이 걸릴것이다.

문제였던 사이트는 6시간이 지나도 롤백이 완료가 되지 않았으므로 7200개 이상의 언두 엔트리가 롤백되고 있었음을 추측할 수 있다.

 

해결을 위해 _rollback_cleanup_entries 값을 2000정도로 증가시킬 예정이다. 재시작이 필요한 작업. 참고로 다른 사이트중에서 이 값을 10000으로 설정해 사용중인 곳도 있다.

Posted by neo-orcl
,