본문 바로가기
Database

오라클 TEMP 테이블스페이스 모니터링

by 굿센스굿 2024. 12. 5.
반응형

 

TEMP 테이블스페이스는 오라클 데이터베이스에서 정렬, 해시 조인, 인덱스 생성 등과 같은 작업을 처리하기 위해 일시적인 데이터가 저장되는 공간입니다. TEMP 테이블스페이스를 효과적으로 관리하고 모니터링하면 성능 문제를 사전에 예방하고, 자원의 효율성을 극대화할 수 있습니다. 이 글에서는 TEMP 테이블스페이스의 역할과 중요성, 모니터링 방법, 그리고 실제 문제 해결 사례를 다룹니다.


1. TEMP 테이블스페이스란?

TEMP 테이블스페이스는 **임시 테이블스페이스(Temporary Tablespace)**로 불리며, 다음과 같은 작업에서 사용됩니다:

  • 대규모 정렬 작업(ORDER BY, GROUP BY)
  • 해시 조인(Hash Join)
  • 임시 테이블 사용
  • 인덱스 생성 및 재구성

주요 특징

  • 데이터 영속성 없음: 작업이 끝나면 데이터는 삭제됩니다.
  • 공유 사용: 여러 세션이 동일한 TEMP 테이블스페이스를 사용할 수 있습니다.
  • 정적 크기 관리: 데이터파일을 통해 TEMP 공간을 관리하며, 크기가 초과되면 작업이 실패할 수 있습니다.

2. TEMP 테이블스페이스가 중요한 이유

TEMP 테이블스페이스는 충분한 공간이 확보되지 않거나 잘못 관리되면 다음과 같은 문제가 발생할 수 있습니다:

  • 쿼리 성능 저하
  • "ORA-01652: unable to extend temp segment" 오류 발생
  • 시스템 전반의 응답 속도 저하

효율적으로 모니터링하여 TEMP 사용량 증가를 조기에 발견하고, 문제를 예방하는 것이 중요합니다.


3. TEMP 테이블스페이스 모니터링 방법

3.1 DBA_TEMP_FREE_SPACE 뷰 활용

DBA_TEMP_FREE_SPACE 뷰를 통해 TEMP 테이블스페이스의 사용량과 여유 공간을 확인할 수 있습니다.

SELECT 
    TABLESPACE_NAME,
    FILE_ID,
    BYTES_USED / 1024 / 1024 AS USED_MB,
    BYTES_FREE / 1024 / 1024 AS FREE_MB,
    (BYTES_USED / (BYTES_USED + BYTES_FREE)) * 100 AS USAGE_PERCENT
FROM DBA_TEMP_FREE_SPACE;

위 쿼리는 TEMP 테이블스페이스의 현재 사용률을 퍼센트로 계산해줍니다.


3.2 V$TEMPSEG_USAGE 뷰 활용

현재 TEMP 테이블스페이스를 사용하는 세션의 정보를 확인할 수 있습니다.

SELECT 
    SESSION_ID,
    USERNAME,
    SEGMENT_TYPE,
    TABLESPACE,
    BLOCKS * 8192 / 1024 / 1024 AS USED_MB
FROM V$TEMPSEG_USAGE;
  • SESSION_ID: TEMP 공간을 사용하는 세션 식별자.
  • USERNAME: TEMP 공간을 사용하는 사용자 이름.
  • USED_MB: TEMP에서 사용 중인 크기(MB).

3.3 알람 설정으로 자동화

TEMP 테이블스페이스가 특정 임계치 이상 사용될 경우 자동으로 알림을 받도록 설정할 수 있습니다. 예를 들어 Oracle Enterprise Manager(OEM)를 사용하면 다음과 같은 조건으로 알림을 생성할 수 있습니다:

  • TEMP 사용률이 80% 이상일 때 경고(Alert).
  • TEMP 사용률이 95% 이상일 때 긴급 알람(Critical Alert).

4. TEMP 테이블스페이스 문제 해결 사례

사례 1: 대규모 데이터 정렬로 인한 TEMP 부족 문제

문제: 한 고객사는 대규모 정렬 작업이 포함된 쿼리를 실행하던 중 "ORA-01652: unable to extend temp segment" 오류가 발생했습니다.
해결:

  • TEMP 테이블스페이스 크기를 기존 10GB에서 20GB로 확장.
  • 쿼리를 최적화하여 정렬 작업을 줄임(불필요한 ORDER BY 제거).
  • TEMP 공간을 보다 효율적으로 사용할 수 있도록 파티셔닝 전략 도입.

사례 2: 잘못된 사용자 프로세스로 인한 TEMP 과다 사용

문제: 특정 사용자가 복잡한 해시 조인 쿼리를 반복적으로 실행하면서 TEMP 테이블스페이스가 초과 사용되었습니다.
해결:

  • V$TEMPSEG_USAGE 뷰를 통해 문제를 일으킨 세션을 식별.
  • 해당 세션을 종료 후 쿼리 튜닝을 통해 TEMP 사용량 감소.
  • 문제 재발 방지를 위해 TEMP 사용량이 많은 쿼리에 대해 제한을 설정.

사례 3: TEMP 공간 자동 관리 문제

문제: TEMP 테이블스페이스의 크기가 자동으로 증가하지 않아 작업 중단 발생.
해결:

  • TEMP 테이블스페이스를 AUTOEXTEND ON으로 설정하여 동적 확장 가능하도록 구성.
  • TEMP 데이터파일 크기 상한을 설정하여 스토리지 자원 낭비 방지.
ALTER DATABASE TEMPFILE '/u01/oradata/temp01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

5. TEMP 테이블스페이스 관리 최적화

5.1 TEMP 공간 크기 조정

  • TEMP 공간은 워크로드와 쿼리 유형에 따라 충분히 설정해야 합니다.
  • 주기적으로 사용량을 검토하고, 필요한 경우 TEMP 파일을 추가하거나 크기를 조정합니다.

5.2 쿼리 최적화

  • 정렬 및 해시 조인이 많이 발생하는 쿼리를 튜닝하여 TEMP 사용량을 줄입니다.
  • 인덱스를 활용하거나 결과를 단계적으로 처리하는 방식을 고려합니다.

5.3 주기적인 TEMP 초기화

  • TEMP 사용률이 비정상적으로 높아질 경우 주기적으로 초기화를 수행하여 공간을 확보합니다.
ALTER DATABASE TEMPFILE '/u01/oradata/temp01.dbf' RESIZE 10G;

6. 결론

TEMP 테이블스페이스는 오라클 데이터베이스 성능에 중요한 역할을 합니다. 꾸준한 모니터링과 적절한 관리를 통해 TEMP 공간 부족으로 인한 오류를 예방하고, 데이터베이스의 안정적인 운영을 보장할 수 있습니다.
적절한 쿼리 튜닝, 자동화된 알람 설정, 그리고 TEMP 공간의 주기적인 관리가 이를 실현하는 핵심 요소입니다.

반응형