[오라클] UNDO 사용량 증가 SQL 확인 방법

|
반응형

UNDO 테이블스페이스 사용량 증가로 인한 문제점 및 SQL 확인 방법

 

작업 환경
OS: Oracle Linux 8.9
DB: Oracle 19c

 

오라클 UNDO 사용량이 갑자기 크게 증가할 때 원인을 분석하는 방법

- UNDO 사용량을 확인합니다.<

- UNDO 사용량이 갑자기 증가되는 상황은 데이터 변경이 과도하게 많이 발생할 때 자주 나타납니다.

- 문제가 발생된 SQL을 확인하고 SQL 로직 개선 필요.

- 한번에 대량의 데이터 변경을 한다면 LOOP를 이용해 여러개로 쪼개서 (예:만건 단위) COMMIT 하면서

처리하면 UNDO 사용량을 줄일수 있습니다.

 

 

 

 

 

SQL 스크립트:

 

-- UNDO 전체 사이즈 확인

SELECT
    TABLESPACE_NAME,
    FILE_NAME,
    ROUND(BYTES/1024/1024/1024,2) AS "SIZE_GB"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = 'UNDOTBS1';




-- UNDO 사용량 분석
-- UNDO는 FREE SPACE로 확인하지 않고 EXPIRED, UNEXPIRED로 분석합니다.

-- EXPIRED 공간이 충분한지 확인

SELECT 
    A.TABLESPACE_NAME,
    A.STATUS,
    ROUND(SUM(A.BYTES/1024/1024/1024),2) AS "USED_GB"
FROM DBA_UNDO_EXTENTS A,
     DBA_TABLESPACES  B
WHERE 1=1
AND A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND B.CONTENTS = 'UNDO'
GROUP BY A.TABLESPACE_NAME, A.STATUS
ORDER BY 1, 2;




-- UNDO 사용량이 높은 SQL 찾기
-- 담당자와 상의 후 작업을 일단 멈추고 문제가 발생한 부분을 찾아 개선한다.
-- 문제 발생 원인은 CASE BY CASE 이지만 대량 데이터 변경으로 인한 문제일 확율이 매우 높음

SELECT 
    MAXQUERYID AS "SQL_ID", 
    SUM((ACTIVEBLKS*8)/1024) AS "ACTIVE_BLOCK", 
    MAX((UNEXPIREDBLKS*8)/1024)  
FROM V$UNDOSTAT
WHERE MAXQUERYID IS NOT NULL
GROUP BY MAXQUERYID
ORDER BY 2 DESC;

 

 

 

 

 

반응형
And
prev | 1 | 2 | 3 | 4 | 5 | ··· | 37 | next