오랫동안 수행했던 DML 세션을 Kill 취소 했을 경우 사용한 Undo 릴리즈 하는 남은 시간 확인 하는 방법
수행 시간이 긴 트랜잭션을 kill 했을 경우 SMON이 복구하는 과정에서
wait for a undo record 이벤트와 PX Deq: Txn Recovery Start 이벤트가 동시에 대량으로 발생합니다.
1 ) update 하던 세션이 너무 오래 걸려서 아래와 같이 세션 kill 을 수행했습니다.
| 
					 1  | 
						alter system kill session 'sid,seiral#' immediate;  | 
					
이렇게 하면 SMON 은 여러개의 서버 프로세스를 이용해서 트랜잭션을 rollback 처리합니다.
상당히 많은 량의 wait for a undo record 이벤트와 PX Deq: Txn Recovery Start가 감지가 된 것을 볼 수 있습니다.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
						=========================================================================================== Session Information =========================================================================================== SID-SERIAL     HashValue    Spid       Machine-Program                 COMMAND LOGON_TIME  Call(s)    EVENT -------------- ------------ ---------- --------------------------      ------  ---------- ---------- ------------------------- [9874,46615]   0            7472078    orcl@db01 (P000)  n/a     0620.20:12    000.000  db file sequential read [245,61609]    0            61670314   orcl@db01 (P059)  n/a     0620.20:12    000.000  wait for a undo record [5681,17633]   0            35717294   orcl@db01 (P035)  n/a     0620.20:12    000.000  row cache lock [5480,33199]   0            24707536   orcl@db01 (P007)  n/a     0620.20:12    000.000  wait for a undo record [5238,20611]   0            20578538   orcl@db01 (P036)  n/a     0620.20:12    000.000  wait for a undo record ... ================================================================================ Session Information ================================================================================ SID-SERIAL     HashValue    Spid       Machine-Program             COMMAND LOGON_TIME  Call(s)    EVENT -------------- ------------ ---------- --------------------------  ------- ----------- ---------- --------------------------- [9867,18343]   0            7472078    orcl@db01 (P000)   n/a     0620.20:24    000.000  wait for a undo record [5238,20743]   0            20578538   orcl@db01 (P036)   n/a     0620.20:24    000.000  PX Deq: Txn Recovery Start [3256,43759]   791757000    52822524   orcl@db01 (P029)   select  0620.20:24    000.000  PX Deq: Txn Recovery Start [8495,57391]   0            12518128   orcl@db01 (P056)   n/a     0620.20:24    000.000  PX Deq: Txn Recovery Start ...  | 
					
이것을 Fast Start Parallel Rollback 이라고 합니다.
초기화 파라메터 FAST_START_PARALLEL_ROLLBACK 의 값에 따라서 복구할 때 의 parallel degree 가 결정이 됩니다.
FALSE 일 경우는 Parallel Rollback을 수행하지 않는 것이며,
LOW (default) 일 경우는 CPU_COUNT * 2 까지 병렬로 롤백을 진행합니다.
HIGH 일 경우는 CPU_COUNT * 4 까지 병렬로 롤백을 수행합니다.
parallel rollback 이 항상 좋은 것만은 아닙니다.
변경이 많은 서비스의 경우에는 이로 인해서 undo segment 부족 현상으로 아래와 같은 에러 메시지로 장애상황이 될 수 도 있습니다.
| 
					 1  | 
						ORA-30036: unable to extend segment by 8 in undo tablespace "UNDO TABLESPACE NAME"  | 
					
Parallel rollback 처리중에 V$FAST_START_SERVERS 로 상태를 조회할 수 있습니다.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						select state, count(*) from V$FAST_START_SERVERS group by state; STATE         COUNT(*) ----------- ---------- RECOVERING          60 / STATE         COUNT(*) ----------- ---------- IDLE                59 RECOVERING           1  | 
					
그리고, 언제쯤 끝날지도 V$FAST_START_TRANSACTIONS 뷰로 예측해볼 수 있습니다.
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						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 ---------- ---------------- ---------- ---------- ---------- -------------------        1109 RECOVERING          2269489      31317    2238172 2019/08/08 00:06:03  | 
					
| 다음과 같이 예측해볼 수도 있습니다 | 
| 
					 1 2 3 4 5 6 7 8  | 
						 select ktuxeusn, to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') "Time", ktuxesiz, ktuxesta from x$ktuxe where ktuxecfl = 'DEAD';     KTUXEUSN Time                  KTUXESIZ KTUXESTA ---------- ------------------- ---------- --------------        1109 2019/07/20 23:07:22    1800231 ACTIVE  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						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 ---------- ---------------- ---------- ---------- ---------- -------------------        1109 RECOVERING          2269489      31317    2238172 2019/07/21 00:06:03  | 
					
| 다음과 같이 예측해볼 수도 있습니다. | 
| 
					 1 2 3 4 5 6 7  | 
						select ktuxeusn, to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') "Time", ktuxesiz, ktuxesta from x$ktuxewhere ktuxecfl = 'DEAD';    KTUXEUSN Time                  KTUXESIZ KTUXESTA ---------- ------------------- ---------- --------------        1109 2019/07/20 23:07:22    1800231 ACTIVE  | 
					
완료가 되면 이렇게 조회가 됩니다.
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						 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 ---------- ---------------- ---------- ---------- ---------- -------------------       1109 RECOVERED             32874      32874          0 2019/07/21 00:24:21  | 
					
              
Hiya, I am really glad I have found this information. Nowadays bloggers publish just about gossips and web and this is really irritating. A good blog with interesting content, that’s what I need. Thank you for keeping this website, I will be visiting it. Do you do newsletters? Can not find it.