Oracle Undo Tablespace 급증 원인과 해결법: 트랜잭션 병목 방지 가이드

 Oracle에서 UNDO 테이블스페이스는 트랜잭션 롤백과 읽기 일관성을 유지하는 핵심 요소입니다. 그런데 어느 날 갑자기 Undo 공간이 폭증한다면? 단순한 디스크 문제로 끝나지 않을 수 있습니다. 이 글에서는 Undo Tablespace가 급격히 늘어나는 주요 원인과 DBA 실전 해결 전략을 알려드립니다.


🔸 Undo Tablespace란?

Oracle의 Undo는 DML 작업(INSERT, UPDATE, DELETE)에 대한 변경 전 데이터를 저장하여

  • 트랜잭션 롤백
  • Consistent Read
  • Flashback Query

를 가능하게 합니다.


🔸 Undo Tablespace가 갑자기 늘어나는 주요 원인

원인설명
✅ 대용량 DML수백만 건 UPDATE/DELETE 트랜잭션 발생 시 Undo 폭증
✅ 장기 실행 쿼리읽기 일관성을 위해 Undo를 장시간 유지해야 함
✅ 대량 병렬 작업병렬 INSERT/UPDATE가 동시에 발생할 경우
✅ Flashback 설정 영향UNDO_RETENTION 설정 값이 크면 오래 보관
✅ 자동 확장 설정Undo 테이블스페이스가 AUTOEXTEND ON 상태면 무제한 팽창 가능
✅ 장기 미커밋 트랜잭션커밋 안 된 트랜잭션이 Undo 블록을 계속 점유

🔍 진단 방법

1. Undo 사용량 모니터링

SELECT a.tablespace_name, a.file_id, a.bytes/1024/1024 AS mb, a.autoextensible
FROM dba_data_files a
WHERE tablespace_name LIKE 'UNDO%';


2. Undo 세그먼트 확인

SELECT segment_name, status, tablespace_name, blocks
FROM dba_rollback_segs
ORDER BY blocks DESC;

3. 장기 트랜잭션 확인

SELECT s.sid, s.serial#, s.username, t.used_ublk, t.start_time
FROM v$transaction t
JOIN v$session s ON t.ses_addr = s.saddr;

🔧 해결 방안 및 튜닝 전략

✅ 1. 장기 트랜잭션 강제 종료

  • 장시간 커밋되지 않은 세션 식별 후 강제 종료
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

✅ 2. Undo Retention 조정

  • 너무 큰 UNDO_RETENTION 값은 오래된 Undo를 보존해서 공간 부족 초래
ALTER SYSTEM SET UNDO_RETENTION = 900;

📌 주의: Flashback 기능 사용 중이면 너무 낮추면 안 됩니다.

✅ 3. Undo 자동 확장 제한

ALTER DATABASE DATAFILE '/oracle/oradata/UNDOTBS01.dbf' AUTOEXTEND OFF;

→ 필요 시 수동 증가로 전환하여 예측 가능한 용량 관리

✅ 4. 대량 DML 분할 처리

  • COMMIT 없이 대량 데이터 작업 시 Undo 폭증 발생
  • 10,000건 단위로 끊어 작업 + 주기적 COMMIT 권장

✅ 5. Flashback 기능 비활성화 확인 (불필요 시)

SELECT flashback_on FROM v$database;
-- 필요 없으면 비활성화


✅ 6. AWR 리포트로 확인

Undo 사용량이 급증한 시점의 AWR을 보면 원인 트랜잭션 파악 가능


다음 이전