Skip to end of metadata
Go to start of metadata

 

1. 개요


언두 테이블스페이스 사용량이 지속적으로 증가하거나 감소하지 않는 경우, 원인을 정확히 파악하고 이에 따른 적절한 조치를 수행해야 합니다.

일반적으로 언두 사용량은 다음과 같은 상황에서 증가하거나 해제되지 않습니다.

  • 장시간 변경 트랜잭션 수행: 디스크 테이블에 대한 DML 트랜잭션이 종료되지 않고 장시간 지속되는 경우

  • 미종료 트랜잭션: SQL 수행은 완료되었으나, 커밋 또는 롤백이 수행되지 않아 트랜잭션이 열린 상태로 유지되는 경우

  • 언두 이미지 참조: 조회 질의문이 변경 전 데이터를 참조하여 해당 언두 영역이 재사용되지 못하고 장시간 유지되는 경우

  • LOB 자원 미해제: Non-autocommit 모드에서 LOB 데이터를 조회한 후, LOB 커서 또는 트랜잭션을 적시에 종료하지 않은 경우

  • 롤백 진행 중: 대량 변경 트랜잭션이 취소되어 복구 작업이 장시간 진행되는 경우

본 문서는 이러한 언두 사용량 증가 원인을 진단하기 위한 주요 모니터링 항목을 정리하고, 상황 별 조치 방안 및 증가 방지 방안을 제공합니다.

 

2. 모니터링 쿼리


언두 테이블스페이스 사용량이 감소하지 않거나 지속적으로 증가하는 경우, 언두를 사용하거나 언두 이미지에 접근하고 있는 트랜잭션과 그 상태를 확인해야 합니다.

아래는 이러한 트랜잭션을 조회하기 위한 모니터링 쿼리입니다.

Altibase 5.3.3 이상

 

3. 모니터링 시 확인해야 할 주요 항목


모니터링 결과를 해석할 때 다음 항목들을 중점적으로 분석하여 원인을 진단합니다.

판단 기준

항목설명비고
SESSION_ID

트랜잭션을 수행한 세션 ID

이중화 트랜잭션의 경우 이중화 객체 이름 출력

STATEMENT_ID

트랜잭션에서 실행한 SQL문의 ID

값이 NULL이면 statement가 해제된 상태

TX_TYPE

트랜잭션 유형

UPDATE : 변경 트랜잭션 (데이터 변경이 한 번이라도 발생)

SELECT : 조회 전용 트랜잭션

TX_STATUS

트랜잭션 상태

BEGIN : 트랜잭션이 열린 상태

ABORT : 트랜잭션 롤백 상태

SQL_STATUS

질의문의 상태

SQL_ING : 질의문이 수행 중인 상태

SQL_END : 질의문의 수행이 완료된 상태

값이 NULL이면 statement가 해제된 상태

CLIENT_IP

클라이언트 접속 유형 및 IP, PORT, 프로세스 ID 정보

이중화 트랜잭션의 경우 원격 서버 IP와 이중화 포트 출력

값이 NULL이면 세션이 종료된 상태

AUTOCOMMIT

세션의 AutoCommit 설정

값이 NULL이면 세션이 종료된 상태

DISK_VIEW_SCN트랜잭션이 바라보는 언두 이미지의 SCN변경 이전 버전을 조회 중임을 의미
MIN_DISK_LOB_VIEW_SCNLOB 커서가 사용하는 언두 이미지의 SCNLOB 커서가 열려 있음을 의미
UNDO_USED(KB)질의문에서 사용 중인 언두 크기변경 트랜잭션에서 사용한 언두 테이블스페이스의 크기
UNDO_PAGE질의문에서 접근한 언두 페이지 수언두 페이지에 접근하고 있음을 의미

 

4. 상황 별 진단 기준


4.1 장시간 수행 중인 변경 트랜잭션


변경 트랜잭션은 변경 전 데이터를 언두 영역에 기록하므로 언두 사용량이 증가합니다.

판단 기준

항목설명
TX_TYPEUPDATE

변경 연산 트랜잭션을 의미

TX_STATUSBEGIN트랜잭션이 열린 상태
SQL_STATUSSQL_ING

질의문이 수행 중인 상태

UNDO_USED(KB)증가

언두 사용량 증가 여부 판단

※ 외래키, 트리거가 걸린 테이블에 데이터를 입력하는 경우에도 언두가 사용됩니다.

출력 예시

데이터를 변경하는 SQL 문의 수행이 진행 중인 상태

4.2 열린 상태로 장시간 유지 중인 변경 트랜잭션


질의문의 수행이 종료된 이후에 트랜잭션이 종료되지 않으면, 해당 트랜잭션이 사용 중인 언두 영역은 해제되지 않습니다.

판단 기준

항목설명
TX_TYPEUPDATE

변경 연산 트랜잭션을 의미

TX_STATUSBEGIN트랜잭션이 열린 상태
SQL_STATUSSQL_END / NULL

SQL_END : 질의문이 종료된 상태

NULL : 질의문이 해제된 상태

UNDO_USED(KB)고정

변경 연산을 수행하는 질의문이 종료되면 더 이상 증가하지 않음

출력 예시

예시 1: 질의문이 종료되고 트랜잭션이 열려 있는 상태

예시 2: 질의문은 해제되고 트랜잭션이 열려 있는 상태

4.3 변경 전 데이터를 장시간 조회하는 질의문


조회 질의문이 변경 트랜잭션에서 생성한 언두 이미지를 보고 있는 동안에는 언두가 해제되지 않습니다.

판단 기준

항목설명
TX_TYPEUPDATE / SELECT

UPDATE는 과거에 변경 연산을 한 번이라도 수행한 트랜잭션

SELECT는 조회 전용 트랜잭션

SQL_STATUS

SQL ING

질의문이 수행 중인 상태
DISK_VIEW_SCNSCN 값변경 이전 데이터를 조회 중인 상태를 의미
UNDO_USED(KB)NULL 또는 고정조회 트랜잭션 또는 조회 질의문은 언두 사용량이 증가하지 않음
UNDO_PAGE증가

증가하면 언두 데이터를 조회 중인 상태를 의미하며

멈춰있거나 0 이면 언두 데이터를 조회하지 않은 상태를 의미함.

출력 예시

예시 1: 조회 전용 트랜잭션이 수행 중인 경우

예시 2: 변경 트랜잭션에서 조회 질의문이 수행 중인 경우

4.4 non-autocommit 모드에서 LOB 조회 트랜잭션이 열린 상태인 경우


non-autocommit 모드에서 LOB 데이터를 조회한 후 트랜잭션을 종료하지 않거나, LOB 커서를 닫지 않은 상태로 statement만 해제하는 경우 언두가 해제되지 않습니다.

이로 인해 언두 사용량이 지속적으로 증가할 수 있습니다.

판단 기준

항목설명

TX_STATUS

BEGIN

트랜잭션이 열려 있는 상태

MIN_DISK_LOB_VIEW_SCNSCN 값LOB 커서가 열려 있는 상태

출력 예시

예시 1: LOB 데이터를 조회한 후 트랜잭션을 종료하지 않은 경우

예시 2: LOB 데이터를 조회한 후 statement만 해제하고 트랜잭션은 열려 있는 상태

4.5 롤백 진행 중인 트랜잭션


롤백 중에는 언두를 사용하여 데이터를 원래 상태로 복구하므로, 롤백이 완료될 때까지 언두 사용량이 유지될 수 있습니다.

판단 기준

항목설명
STATEMENT_ID숫자 / NULL

숫자: 세션이 살아 있음

NULL: 세션이 종료된 상태에서도 롤백이 진행 중

TX_TYPEUPDATE변경 트랜잭션
TX_STATUSABORT트랜잭션이 롤백 상태임을 의미

출력 예시

예시 1: 명시적으로 롤백을 수행한 상황

예시 2: 세션을 강제로 종료한 상황

4.6 이중화 트랜잭션


이중화 복제 트랜잭션으로 인해 언두가 사용되는 경우입니다.

판단 기준

항목설명
SESSION_ID이중화 객체 이름

이중화 트랜잭션의 경우 이중화 객체 이름을 표시

CLIENT_IP원격 서버 IP원격 서버의 IP를 표시
TX_STATUS

BEGIN

트랜잭션 진행 상태
QUERY

REMOTE_TX_ID

주 트랜잭션의 트랜잭션 ID

출력 예시

 

5. 조치 방법


언두 테이블스페이스 사용량이 임계치에 도달했을 때, 즉각적으로 취할 수 있는 조치는 크게 물리적 공간 확장과 원인 세션 제거 두 가지입니다.

5.1 언두 테이블스페이스 확장


언두 공간 부족으로 인한 서비스 장애가 우려되는 경우, 언두 테이블스페이스 용량을 확장합니다. 확장 전 반드시 파일시스템의 물리적 여유 공간을 확인하십시오.

방법 A: 데이터 파일 추가

기존 파일 외에 새로운 데이터 파일을 추가하여 공간을 확보하는 방식입니다. 우선 현재 구성된 파일을 확인합니다.

방법 B: 기존 파일 크기 확장

기존 데이터 파일의 최대 크기나 현재 크기를 증가하는 방식입니다.

5.2 세션 강제 종료


공간 확장이 어렵거나 특정 세션의 비정상적인 점유가 확실할 때 수행합니다.

주의

대량의 데이터를 처리하던 DML 세션을 종료할 경우, 롤백 작업으로 인해 언두 자원이 즉시 확보되지 않을 수 있습니다.

트랜잭션 유형 별 영향

트랜잭션 유형종료 시 영향자원 회수 시점
조회(SELECT)즉시 종료 가능세션 종료 즉시
변경(DML)롤백(Rollback) 수행롤백 완료 후

세션 강제 종료

V$DATABASE에서 데이터베이스 이름을 확인한 후, 모니터링 쿼리에서 확인한 SESSION_ID를 지정하여 종료합니다.

클라이언트 프로세스 종료

DB 접속이 원활하지 않거나 애플리케이션 레벨에서 연결을 끊어야 할 경우, OS에서 프로세스를 직접 종료합니다.

process_id 값은 모니터링 쿼리의 CLIENT_IP 항목에서 확인할 수 있습니다.

 

6. 언두 테이블스페이스 증가 방지 방안


장시간 수행되는 트랜잭션(벌크 트랜잭션)은 변경 작업이 장시간 유지되면서 언두 테이블스페이스 사용량을 증가시키는 주요 원인이 됩니다.

대량 변경 작업이 하나의 트랜잭션으로 처리하는 경우 다음과 같은 문제가 발생할 수 있습니다.

  • 언두 공간의 급격한 증가: 변경 전 데이터를 보관하기 위한 언두 세그먼트가 단시간에 크게 증가합니다.

  • 자원 해제 지연: 트랜잭션이 최종 완료(COMMIT/ROLLBACK)될 때까지 사용 중인 언두 이미지가 유지되어 재사용이 제한됩니다.

  • 복구(롤백) 부하 증가: 장애 또는 취소 시 처리해야 할 언두 데이터가 증가하여, 트랜잭션 수행 시간보다 더 긴 롤백 시간이 소요될 수 있습니다.

이와 같은 상황을 방지하기 위해 아래 항목을 검토하여 트랜잭션 처리 방식을 최적화해야 합니다.

6.1 대량 트랜잭션 분할 처리


대량의 데이터를 하나의 트랜잭션으로 처리하는 대신, 작업을 여러 개의 작은 배치로 나누어 수행합니다.

이러한 방식은 언두 공간의 재사용성을 높여 전체적인 언두 부하를 줄여줍니다.

또한, 장애 등으로 인해 롤백이 발생할 경우 복구해야 할 범위를 최소화할 수 있다는 장점이 있습니다.

예시

방법 1: 범위 조건(BETWEEN ~ AND) 활용

고유 키(PK)나 인덱스가 있는 칼럼을 기준으로 범위를 나누어 커밋합니다.

방법 2: 행 제한(LIMIT) 활용

특정 조건에 맞는 데이터를 일정 개수만큼씩 반복해서 삭제합니다.

6.2 UTRANS_TIMEOUT 설정


변경 트랜잭션이 장시간 활성 상태로 유지되면 언두 이미지가 오래 남게 되어 언두 사용량이 증가할 수 있습니다.

이를 방지하기 위해  UTRANS_TIMEOUT 을 설정하면, 지정된 시간을 초과하는 트랜잭션을 자동으로 종료하고 롤백할 수 있습니다.

세션 단위 설정

iSQL 예시: 

커넥션 스트링 예시: 

  • Java

  • APRE

시스템  단위 설정

다음 구문을 수행하면 이후 접속하는 모든 세션에 설정이 적용됩니다.

설정을 영구적으로 반영하려면 altibase.properties 파일을 수정합니다.

6.3 미종료 트랜잭션 점검


Non-Autocommit 모드를 사용하는 애플리케이션에서 예외 처리 누락이나 로직 미비로 인해 트랜잭션이 종료되지 않고 방치(Idle)되지 않도록 주의해야 합니다. 업무 로직이 종료되는 시점에는 반드시 COMMIT 또는 ROLLBACK이 명시적으로 수행되어야 합니다.

6.4 LOB 자원 해제


LOB 작업 과정에서 생성된 LOB 커서는 트랜잭션이 종료되거나 커서가 닫힐 때까지 언두 데이터를 유지합니다.

LOB 데이터 처리 후에는 다음 중 하나의 작업을 반드시 수행해야 합니다.

  • LOB 커서 닫기

  • 트랜잭션 종료(COMMIT 또는 ROLLBACK)

(warning)  주의

SQLCLI에서 SQLFreeLob() 함수는 호출 즉시 서버로 요청을 보내지 않고, 이후 발생하는 다른 요청과 함께 전송됩니다. 이로 인해 클라이언트의 호출 시점과 실제 서버에서의 LOB 자원 해제 시점 사이에 차이가 발생할 수 있습니다. 즉각적인 자원 해제가 필요한 경우, 트랜잭션을 완전히 종료하는 것이 가장 확실한 방법입니다.

 

  • No labels