다른 명령
빠르게 롤백 하는 방법
- SMON parallell 로 트랜잭션 롤백하기
- 트랜잭션을 킬하면 트랜잭션이 처리했던 데이터들을 롤백
- 롤백이 끝날때까지 해당 테이블에 트랜잭션을 수행할 수 없어 무한정 기다림
트랜잭션 & 프로세스 킬
- db
-- session kill alter system kill session 'sid,seiral#' immediate; -- killed seasion 확인 SELECT s.sid, s.serial#, p.spid FROM v$process p , v$session s WHERE p.addr = s.paddr AND s.status='KILLED'
- OS
kill -9 pid => DB상에서 트랜잭션 정리 후 spid를 찾아 OS상에서도 프로세스를 정리해줌
Fast Start Parallel Rollback 처리
- db상에서 세션을 킬했을 때의 롤백은 프로세스 하나로 처리되기 때문에 롤백속도가 매우 느림
- 롤백 중인 세션마저 킬했을 경우에는 오라클은 비정상종료로 인식하고 빠른 정상화를 위해 SMON을 병렬로 활용하여 트랜잭션을 롤백함
- 이것을 Fast Start Parallel Rollback 라고 함
롤백 상태 모니터링 쿼리
SQL> show parameter fast_start_parallel_rollback; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fast_start_parallel_rollback string LOW
- 파라미터 값에 따라 롤백 시 사용 될 parallel degree가 정해짐
- FALSE : 사용안함
- LOW : CPU_COUNT*2
- HIGH : CPU_COUNT*4
커맨드로 동적으로 변경
ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK=HIGH;
롤백이 언제 끝날지 유추 하는 쿼리
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT usn, state , undoblockstotal "Total" , undoblocksdone "Done" , undoblockstotal-undoblocksdone "ToDo" , DECODE(cputime,0,'unknown',SYSDATE+(((undoblockstotal-undoblocksdone) / (undoblocksdone / cputime)) / 86400)) "Finish at" FROM v$fast_start_transactions; USN STATE Total Done ToDo Finish at 1074 RECOVERING 2756639 55180 2701459 2019/05/08 02:08:06
- 병렬로 롤백처리 하면 기존방식 보다 훨씬 빠르다는 장점도 있지만 프로세스가 병렬로 대량 수행되고 서버 리소스를 많이 사용하게 되어 서버에 의도치 않은 부하를 줄 수 있으니
수행하기 전 검토 필요