문제 발생
운영 중인 SQL Server 데이터베이스에서 디스크 사용량 경고가 발생했다.
또한 서비스 장애와 속도가 느려지는 현상들이 발생했다.
확인 결과 트랜잭션 로그(LDF) 파일이 약 500GB까지 증가하였으며, 로그 사용률 또한 거의 100%에 근접한 상태였다.
일반적으로 트랜잭션 로그가 급격히 증가하는 경우에는 다음과 같은 원인을 먼저 의심하게 된다.
- 장시간 종료되지 않는 트랜잭션
- 대량 데이터 처리 작업
- 로그 백업 미수행
- Replication 또는 CDC 관련 이슈
이번 사례 역시 이러한 관점에서 원인 분석을 진행하였다.
1차 확인 - 장기 트랜잭션 확인
가장 먼저 SQL Server의 활성 트랜잭션 상태를 확인하였다.
DBCC OPENTRAN;
그러나 예상과 달리 장시간 유지 중인 사용자 트랜잭션은 확인되지 않았다.
반면 데이터베이스 상태를 조회한 결과 다음과 같은 정보가 확인되었다.
SELECT
name,
recovery_model_desc,
log_reuse_wait_desc
FROM sys.databases;
결과
log_reuse_wait_desc = ACTIVE_TRANSACTION
SQL Server는 여전히 활성 트랜잭션 때문에 로그를 재사용할 수 없다고 판단하고 있었다.
2차 확인 - CDC 상태 점검
해당 데이터베이스는 AWS DMS CDC(Change Data Capture)를 이용하여 타 시스템으로 데이터를 동기화하고 있었다.
먼저 CDC 관련 Job 상태를 확인하였다.
EXEC sys.sp_cdc_help_jobs;
확인 결과
- Capture Job 정상
- Cleanup Job 정상
으로 확인되었다.
추가로 CDC Log Scan 상태도 점검하였다.
SELECT *
FROM sys.dm_cdc_log_scan_sessions;
결과는 모두 정상 종료(Done) 상태였으며 에러도 발견되지 않았다.
즉, 분석 시점 기준으로는 CDC 자체가 중단되거나 오류 상태는 아니었다.
3차 확인 - 이상 세션 발견
활성 세션을 조사하던 중 특이한 세션을 발견하였다.
SELECT
session_id,
program_name,
status,
open_transaction_count
FROM sys.dm_exec_sessions;
확인 결과 일부 세션에서 다음과 같은 상태가 확인되었다.
program_name = replctl
status = sleeping
open_transaction_count = 1
특히 해당 세션은 장시간 Sleeping 상태였음에도 트랜잭션을 보유하고 있었다.
일반적인 사용자 세션이라기보다 Replication 또는 CDC 관련 내부 세션으로 판단되었다.
결정적 단서
문제가 되는 세션의 마지막 실행 SQL을 확인하였다.
DBCC INPUTBUFFER(<session_id>);
확인 결과 다음과 같은 SQL이 조회되었다.
BEGIN TRANSACTION
UPDATE dbo.awsdms_truncation_safeguard
SET ...
여기서 AWS DMS가 사용하는 내부 테이블인 awsdms_truncation_safeguard가 확인되었다.
awsdms_truncation_safeguard란?
AWS DMS는 CDC 작업 수행 시 트랜잭션 로그가 조기에 삭제되지 않도록 내부적으로 관리 테이블을 사용한다.
그중 하나가 awsdms_truncation_safeguard 이다.
DMS는 이 테이블을 통해 CDC 작업에 필요한 로그 범위를 보호하며, 정상적으로 종료될 경우 관련 트랜잭션도 함께 정리된다.
추정되는 원인
조사 과정에서 확인된 내용은 다음과 같다.
- AWS DMS 관련 세션 존재
- 해당 세션이 Sleeping 상태에서 트랜잭션 보유
- awsdms_truncation_safeguard 관련 트랜잭션 확인
- SQL Server 상태는 ACTIVE_TRANSACTION
- LDF 사용률 99% 이상
따라서 다음과 같은 시나리오를 의심할 수 있었다.
AWS DMS CDC 작업 수행
↓
트랜잭션 생성
↓
DMS 작업 중단 또는 비정상 종료
↓
트랜잭션 미정리
↓
ACTIVE_TRANSACTION 상태 유지
↓
로그 절단(Log Truncation) 불가
↓
LDF 파일 지속 증가
다만 DMS 작업이 실제로 어떤 시점에 중단되었는지, 그리고 해당 트랜잭션이 직접적으로 로그 증가를 유발했는지에 대해서는 추가 검증이 필요하다.
따라서 위 내용은 분석 과정에서 도출된 정황이며, 확정된 원인으로 단정할 수는 없다.
분석 과정에서 얻은 교훈
이번 사례를 통해 확인한 점은 다음과 같다.
1. ACTIVE_TRANSACTION은 반드시 사용자 트랜잭션만 의미하지 않는다
SQL Server 내부 세션이나 CDC, Replication 관련 세션도 로그 재사용을 막을 수 있다.
2. CDC Job이 정상이라고 해서 문제가 없는 것은 아니다
Capture Job과 Cleanup Job이 모두 정상 상태였음에도 내부 세션에 의해 로그 관리 문제가 발생할 수 있다.
3. 로그 파일 증가 시 원인부터 확인해야 한다
LDF 파일이 증가했다고 해서 무조건 Shrink를 수행하기보다는 다음 항목을 먼저 확인하는 것이 중요하다.
- log_reuse_wait_desc
- CDC 상태
- Replication 상태
- 활성 세션
- 열린 트랜잭션
- DMS 관련 세션
원인을 제거하지 않은 상태에서 로그 파일만 축소할 경우 동일한 문제가 반복될 수 있다.
마무리
이번 사례는 AWS DMS CDC 운영 환경에서 발생할 수 있는 로그 관리 이슈를 분석한 사례이다.
분석 결과 AWS DMS 관련 세션이 비정상적으로 트랜잭션을 유지하고 있었던 정황이 확인되었으며, 이것이 SQL Server의 ACTIVE_TRANSACTION 상태와 로그 증가 현상에 영향을 주었을 가능성을 확인할 수 있었다.
실제 운영 환경에서는 DMS 상태뿐 아니라 SQL Server 내부의 CDC 및 Replication 관련 세션까지 함께 모니터링하는 것이 중요하다.
'개발이야기 > DB' 카테고리의 다른 글
| 개념적 설계를 시작하기 전에 반드시 이해해야 할 개념 — 관계차수란 무엇인가? (0) | 2025.12.15 |
|---|---|
| ENUM 변경 시 PostgreSQL 잠금 테스트 (0) | 2025.12.15 |
| PostgreSQL ENUM, 장점은 알겠는데… 운영에서는 왜 망설이게 될까 (0) | 2025.12.15 |
| 개념적 설계를 실제로 시작하는 방법 — 엔티티 찾기, 속성 도출, 관계 정의 (0) | 2025.12.09 |
| 설계의 3단계 로드맵: 개념·논리·물리 설계의 전체 구조 (0) | 2025.12.08 |






