"Fast start parallel rollback"의 두 판 사이의 차이
DB CAFE
62번째 줄: | 62번째 줄: | ||
프로세스가 병렬로 대량 수행되고 서버 리소스를 많이 사용하게 되어 서버에 의도치 않은 부하를 줄 수 있으니 | 프로세스가 병렬로 대량 수행되고 서버 리소스를 많이 사용하게 되어 서버에 의도치 않은 부하를 줄 수 있으니 | ||
수행하기 전 검토 필요 | 수행하기 전 검토 필요 | ||
+ | [[category:oracle]] |
2023년 11월 7일 (화) 15:10 판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 빠르게 롤백 하는 방법[편집]
- SMON parallell 로 트랜잭션 롤백하기
- 트랜잭션을 킬하면 트랜잭션이 처리했던 데이터들을 롤백
- 롤백이 끝날때까지 해당 테이블에 트랜잭션을 수행할 수 없어 무한정 기다림
1.1 트랜잭션 & 프로세스 킬[편집]
- db
alter system kill session 'sid,seiral#' immediate;
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상에서도 프로세스를 정리해줌
1.2 Fast Start Parallel Rollback 처리[편집]
- db상에서 세션을 킬했을 때의 롤백은 프로세스 하나로 처리되기 때문에 롤백속도가 매우 느림
- 롤백 중인 세션마저 킬했을 경우에는 오라클은 비정상종료로 인식하고 빠른 정상화를 위해 SMON을 병렬로 활용하여 트랜잭션을 롤백함
- 이것을 Fast Start Parallel Rollback 라고 함
1.3 롤백 상태 모니터링 쿼리[편집]
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
1.4 커맨드로 동적으로 변경[편집]
ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK=HIGH;
1.5 롤백이 언제 끝날지 유추할 수 있는 쿼리[편집]
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
- 병렬로 롤백처리 하면 기존방식 보다 훨씬 빠르다는 장점도 있지만
프로세스가 병렬로 대량 수행되고 서버 리소스를 많이 사용하게 되어 서버에 의도치 않은 부하를 줄 수 있으니 수행하기 전 검토 필요