RDS for SQL Server에서 트랜잭션 로그 사용률을 확인하는 방법
公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13
結論
트랜잭션 로그의 사용률은 인스턴스 전체라면 `DBCC SQLPERF(LOGSPACE)`, 대상 데이터베이스라면 `sys.dm_db_log_space_usage`(SQL Server 2012 이후)로 확인합니다. 사용률이 내려가지 않는 경우 `sys.databases`의 `log_reuse_wait_desc`를 확인하십시오. 로그가 재사용되지 않는 이유가 이 한 열에 나타납니다. 확인용 SQL은 모두 참조 전용이며 Amazon RDS에서도 실행할 수 있습니다.
この文書の適用条件
| 対象製品 | SQL Server / Amazon RDS for SQL Server / Azure SQL Managed Instance |
|---|---|
| 確認バージョン | SQL Server 2008 이후(`sys.dm_db_log_space_usage`는 SQL Server 2012 이후) |
| 適用環境 | 온프레미스, EC2, Amazon RDS, Azure |
| 必要権限 | `DBCC SQLPERF(LOGSPACE)`와 `sys.dm_db_log_space_usage`는 VIEW SERVER STATE. `sys.databases`는 메타데이터 가시성 규칙을 따름 |
| 実行影響 | 참조만 합니다(데이터·설정·로그 내용을 변경하지 않습니다) |
| 再起動 | 불필요 |
| 最終検証日 | 2026-08-13 |
そのまま実行できるコマンド
- 対象
- SQL Server 2008 이후 / Amazon RDS for SQL Server
- 権限
- VIEW SERVER STATE
- 変更作業
- 없음(참조만)
- Production実行
- 가능
-- 対象: SQL Server 2008 以降 / Amazon RDS for SQL Server
-- 権限: VIEW SERVER STATE
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
DBCC SQLPERF(LOGSPACE);인스턴스상의 전체 데이터베이스에 대해 로그 파일 크기(MB)와 사용률(%)을 한 행씩 반환합니다. 먼저 이것으로 "어느 데이터베이스의 로그가 차 있는지"를 파악합니다.
- 対象
- SQL Server 2012 이후 / Amazon RDS for SQL Server
- 権限
- VIEW SERVER STATE
- 変更作業
- 없음(참조만)
- Production実行
- 가능
-- 対象: SQL Server 2012 以降 / Amazon RDS for SQL Server
-- 権限: VIEW SERVER STATE
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
USE [SampleDB];
GO
SELECT
DB_NAME(database_id) AS database_name,
total_log_size_in_bytes / 1024 / 1024 AS total_log_size_mb,
used_log_space_in_bytes / 1024 / 1024 AS used_log_space_mb,
used_log_space_in_percent AS used_log_space_pct,
log_space_in_bytes_since_last_backup / 1024 / 1024 AS log_since_last_backup_mb
FROM sys.dm_db_log_space_usage;이 동적 관리 뷰는 연결 중인 데이터베이스 1건만 반환합니다. 여러 데이터베이스를 보려면 `USE`를 전환하거나, 먼저 `DBCC SQLPERF(LOGSPACE)`로 전체 상황을 파악하십시오. `log_space_in_bytes_since_last_backup`은 마지막 로그 백업 이후 생성된 로그량입니다.
- 対象
- SQL Server 2008 이후 / Amazon RDS for SQL Server
- 権限
- `sys.databases`의 메타데이터 가시성(VIEW ANY DATABASE에 상응)
- 変更作業
- 없음(참조만)
- Production実行
- 가능
-- 対象: SQL Server 2008 以降 / Amazon RDS for SQL Server
-- 権限: sys.databases のメタデータ可視性
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
SELECT
d.name AS database_name,
d.state_desc AS database_state,
d.recovery_model_desc AS recovery_model,
d.log_reuse_wait AS log_reuse_wait_id,
d.log_reuse_wait_desc AS log_reuse_wait_desc,
d.is_cdc_enabled AS is_cdc_enabled,
d.is_published AS is_published,
d.is_subscribed AS is_subscribed
FROM sys.databases AS d
WHERE d.database_id > 4 -- システムデータベースを除外
ORDER BY d.name;이 글에서 가장 중요한 열입니다. 주요 값의 의미는 다음과 같습니다. NOTHING=재사용을 막는 요인 없음. CHECKPOINT=체크포인트 미완료(보통 일시적). LOG_BACKUP=완전/일괄 로그 복구 모델에서 로그 백업 대기 중. ACTIVE_TRANSACTION=열려 있는 트랜잭션이 있음. REPLICATION=트랜잭션 복제 또는 CDC가 읽지 않은 로그를 보유 중. AVAILABILITY_REPLICA=가용성 그룹의 보조 복제본으로의 동기화가 지연됨. DATABASE_MIRRORING=미러링이 일시 중지 또는 지연됨. ACTIVE_BACKUP_OR_RESTORE=백업/복원이 실행 중. 그 외에 DATABASE_SNAPSHOT_CREATION, LOG_SCAN, OLDEST_PAGE, XTP_CHECKPOINT 등이 반환될 수 있습니다.
- 対象
- SQL Server 2008 이후 / Amazon RDS for SQL Server
- 権限
- 대상 DB에 대한 연결 권한
- 変更作業
- 없음(참조만)
- Production実行
- 가능
-- 対象: SQL Server 2008 以降 / Amazon RDS for SQL Server
-- 権限: 対象DBへの接続権限
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
USE [SampleDB];
GO
SELECT
DB_NAME() AS database_name,
f.file_id,
f.name AS logical_name,
f.type_desc,
f.size * 8 / 1024 AS current_size_mb,
CASE
WHEN f.max_size IN (-1, 268435456) THEN NULL -- 無制限扱い
ELSE f.max_size * 8 / 1024
END AS max_size_mb,
CASE
WHEN f.is_percent_growth = 1 THEN CAST(f.growth AS varchar(10)) + ' %'
ELSE CAST(f.growth * 8 / 1024 AS varchar(10)) + ' MB'
END AS autogrowth,
(f.size - CAST(FILEPROPERTY(f.name, 'SpaceUsed') AS bigint)) * 8 / 1024 AS free_space_mb
FROM sys.database_files AS f
WHERE f.type_desc = 'LOG';로그 파일의 `max_size`가 -1(또는 268435456)인 경우 무제한으로 처리됩니다. 자동 확장이 "% 지정"으로 되어 있으면 파일이 커질수록 한 번의 확장량이 급증하므로, 고정 MB 지정이 다루기 쉽습니다.
結果の読み方
| 列 | 意味 | 確認するポイント |
|---|---|---|
| Database Name | `DBCC SQLPERF(LOGSPACE)`가 반환하는 데이터베이스 이름 | 어느 데이터베이스의 로그가 차 있는지 파악 |
| Log Size (MB) | 로그 파일의 현재 크기 | 예상보다 크면 과거에 자동 확장이 반복되었음을 의미 |
| Log Space Used (%) | 로그 사용률 | 지속적으로 높거나 내려가지 않으면 `log_reuse_wait_desc`를 확인 |
| used_log_space_in_percent | `sys.dm_db_log_space_usage`가 반환하는 사용률 | 몇 분 간격으로 가져와서 내려가는지 확인. 내려가지 않으면 해제가 막혀 있음 |
| log_space_in_bytes_since_last_backup | 마지막 로그 백업 이후 생성된 로그량 | 계속 증가한다면 로그 백업이 이루어지지 않고 있을 가능성 |
| recovery_model_desc | 복구 모델(FULL / BULK_LOGGED / SIMPLE) | FULL인데 로그 백업이 없으면 로그가 해제되지 않음 |
| log_reuse_wait_desc | 로그를 재사용할 수 없는 이유 | NOTHING 이외의 값이 계속 나오면 그 값이 근본 원인을 나타냄 |
| is_cdc_enabled / is_published | CDC·복제의 활성화 상태 | `log_reuse_wait_desc = REPLICATION`일 때 어느 쪽이 원인인지 구분하는 근거가 됨 |
こういう状況で使います
- 로그 파일만 계속 늘어나고 스토리지 여유 공간이 줄어든다
- 오류 9002 "데이터베이스 트랜잭션 로그가 가득 찼습니다"로 쓰기가 실패한다
- 로그를 축소해도 곧바로 원래 크기로 돌아간다
- Amazon RDS에서 자동 백업을 설정했는데도 로그 사용률이 내려가지 않는다
考えられる原因(可能性の高い順)
01
복구 모델이 FULL인데 로그 백업이 이루어지지 않음(LOG_BACKUP)
완전 복구 모델에서는 로그 백업을 수행하기 전까지 로그 영역이 재사용되지 않습니다. 복구 모델을 FULL로 설정만 하고 로그 백업 운영이 없는 상태가 이 증상의 가장 흔한 원인입니다.
02
장시간 열려 있는 트랜잭션이 있음(ACTIVE_TRANSACTION)
가장 오래된 미커밋 트랜잭션보다 뒤쪽의 로그는 잘라낼 수 없습니다. 애플리케이션이 `BEGIN TRAN` 상태로 방치하거나, 배치가 비정상 종료되어 롤백 중인 경우가 이에 해당합니다.
03
복제 또는 CDC가 읽지 않은 로그를 보유 중(REPLICATION)
트랜잭션 복제의 로그 리더 에이전트, 또는 CDC의 캡처 작업이 정지되어 있으면 아직 읽지 않은 로그가 해제되지 않고 남습니다.
04
가용성 그룹/미러링의 동기화 지연(AVAILABILITY_REPLICA / DATABASE_MIRRORING)
보조 복제본으로 전송 및 적용이 완료될 때까지 로그가 보존됩니다. 보조 복제본의 정지나 네트워크 지연으로 로그가 쌓입니다.
05
장시간의 백업·복원이 실행 중(ACTIVE_BACKUP_OR_RESTORE)
대용량 데이터베이스 백업 중에는 로그가 잘리지 않습니다. 백업 완료 후 해소되는지 확인합니다.
06
단일 트랜잭션에서의 대량 업데이트
수천만 행의 일괄 삭제·업데이트를 하나의 트랜잭션으로 실행하면 커밋할 때까지 그만큼의 로그가 필요합니다. 로그 크기는 트랜잭션 단위 설계에 의존합니다.
確認手順
- 1
전체 데이터베이스의 로그 사용률을 가져온다
参照のみ`DBCC SQLPERF(LOGSPACE)`를 실행하여 사용률이 높은 데이터베이스를 파악합니다.
- 2
`log_reuse_wait_desc`를 확인한다
参照のみ`sys.databases`를 참조하여 값이 NOTHING 이외로 계속되고 있는지 확인합니다. 여기서 원인 분류가 거의 결정됩니다.
- 3
복구 모델과 로그 백업 여부를 대조한다
参照のみ`recovery_model_desc`가 FULL인 경우 `msdb.dbo.backupset`을 `type = 'L'`(로그 백업)로 필터링하여 최근 로그 백업 시각을 확인합니다.
- 4
열려 있는 트랜잭션을 찾는다
参照のみ`log_reuse_wait_desc = ACTIVE_TRANSACTION`인 경우 `sys.dm_tran_active_transactions` 등으로 가장 오래된 트랜잭션을 특정합니다.
- 5
CDC·복제 상태를 확인한다
参照のみ`log_reuse_wait_desc = REPLICATION`인 경우 CDC 캡처 작업과 로그 리더 에이전트의 동작 상태를 확인합니다.
- 6
몇 분 간격으로 다시 가져와 추이를 본다
参照のみ일시적인 CHECKPOINT나 LOG_SCAN이라면 다음 조회 시 NOTHING으로 돌아갑니다. 한 번의 값만으로 판단하지 마십시오.
対応方法
すぐに実施できる低リスクの対応
원인 쪽을 먼저 해소한다
低`log_reuse_wait_desc`가 나타내는 요인(열린 트랜잭션, 정지된 CDC 작업, 지연된 보조 복제본)을 해소하면 다음 로그 절단 시 사용률이 내려갑니다. 파일 작업보다 먼저 해야 할 대응입니다.
로그 백업 실시 현황을 확인한다
参照のみ온프레미스·EC2의 경우 로그 백업 작업의 성공 여부를 확인합니다. Amazon RDS에서는 백업을 RDS 쪽이 관리하므로, 백업 보존 기간 설정과 복구 모델이 일치하는지 확인합니다.
여유 공간을 일시적으로 확보한다
中쓰기가 멈춘 긴급 상황에서는 로그 파일의 자동 확장 상한과 디스크 여유 공간을 확인하고, 필요하면 로그 파일의 최대 크기·확장 설정을 재검토합니다. 설정 변경은 파일 크기에 영향을 줍니다.
事前検討が必要な変更
대량 업데이트를 배치로 분할한다
低일괄 삭제·업데이트를 수천~수만 행 단위의 트랜잭션으로 분할하여 자주 커밋합니다. 트랜잭션 하나가 보유하는 로그량을 줄일 수 있습니다.
자동 확장 설정을 재검토한다
中% 지정을 고정 MB 지정으로 바꾸고, 예상 피크를 흡수할 수 있는 초기 크기를 설정합니다. 확장 횟수가 줄면 가상 로그 파일(VLF)의 단편화도 억제됩니다.
복구 모델을 업무 요구사항에 맞춘다
高"임의 시점으로의 복구"가 필요 없다면 SIMPLE도 선택지입니다. 다만 SIMPLE에서는 시점 복구가 불가능해지므로 업무 측의 합의가 필수입니다. Amazon RDS에서는 자동 백업과의 정합성도 확인하십시오.
로그 사용률을 상시 모니터링한다
参照のみ사용률과 `log_reuse_wait_desc`를 정기적으로 가져와 NOTHING 이외가 일정 시간 지속되면 알리는 체계를 마련합니다.
再起動・サービス影響を伴う変更
로그 파일 축소
高원인을 해소한 후, 비대해진 부분을 되돌릴 목적으로만 실시합니다. 원인이 남아 있는 상태로 축소해도 다시 확장되며, 확장할 때마다 쓰기가 지연됩니다. 절차와 주의점은 관련 문서를 참조하십시오.
열려 있는 세션의 강제 종료
高`KILL`은 미커밋 트랜잭션을 롤백합니다. 롤백에도 시간과 로그가 필요하며, 영향 범위 확인과 업무 측의 승인이 전제입니다.
!注意事項
- Amazon RDS for SQL Server에서는 백업을 RDS가 관리합니다. 사용자가 `BACKUP LOG`를 직접 실행하는 운영은 전제되어 있지 않으므로, 로그 백업 실시 현황은 백업 보존 기간 설정과 복구 모델의 정합성으로 확인하십시오. 실행 가능 여부와 동작은 엔진 버전·옵션에 따라 다르므로 반드시 대상 환경에서 확인합니다.
- `log_reuse_wait_desc`가 NOTHING 이외라도 CHECKPOINT나 LOG_SCAN은 일시적인 값입니다. 한 번의 조회 결과만으로 장애로 판단하지 마십시오.
- 복구 모델을 FULL에서 SIMPLE로 변경하면 로그 체인이 끊어져 임의 시점으로의 복구가 불가능해집니다. 되돌릴 때는 전체 백업을 다시 받아야 합니다.
- 로그 여유 공간을 만들 목적으로 파일을 축소해도 원인이 남아 있으면 다시 확장됩니다. 축소는 원인 해소의 대안이 되지 않습니다.
- 오류 9002가 발생한 상태에서는 쓰기 트랜잭션이 실패합니다. 원인 조사와 동시에 업무 영향을 먼저 알리십시오.
バージョン・環境による違い
これで解決しない場合に確認すること
가장 오래된 트랜잭션의 시작 시각
`ACTIVE_TRANSACTION`이 계속되는 경우, 어느 세션이 언제부터 트랜잭션을 열어두고 있는지 파악합니다.
CDC 캡처 작업과 로그 리더의 동작 상태
`REPLICATION`이 계속되는 경우, 캡처 쪽이 정지되어 있지 않은지, 배포 데이터베이스 쪽에서 지체되고 있지 않은지 확인합니다.
가상 로그 파일(VLF) 개수
`DBCC LOGINFO`(버전에 따라 `sys.dm_db_log_info`)로 VLF 개수를 확인합니다. 개수가 극단적으로 많으면 복구 및 로그 처리가 느려집니다.
스토리지 쪽의 여유 공간과 IOPS
로그 확장이 실패하는 경우, 원인이 데이터베이스가 아니라 스토리지 쪽일 수 있습니다.
この文書の根拠と限界
製品の公式ドキュメントに基づく説明
SQL Server의 `DBCC SQLPERF(LOGSPACE)`, `sys.dm_db_log_space_usage`, `sys.databases`(`log_reuse_wait_desc`), `sys.database_files`의 공개 사양에 기반한 일반적인 확인 절차입니다. Amazon RDS 고유의 동작은 환경이나 엔진 버전에 따라 차이가 있으므로, 대상 환경에서의 확인을 전제로 기술했습니다.
よくある質問
운영 환경에서 실행할 수 있습니까?
이 글에 실린 4개의 SQL은 모두 참조 전용으로, 데이터와 설정을 변경하지 않습니다. 운영 환경에서 그대로 실행할 수 있습니다. 로그 파일 축소나 복구 모델 변경은 별도 작업이며, 그쪽은 사전 영향 확인이 필요합니다.
AWS RDS에서도 사용할 수 있습니까?
사용할 수 있습니다. `DBCC SQLPERF(LOGSPACE)`, `sys.dm_db_log_space_usage`, `sys.databases` 모두 Amazon RDS for SQL Server에서 참조할 수 있습니다. 다만 `BACKUP LOG`를 직접 실행하는 운영은 RDS에서 전제되어 있지 않으므로, 로그 백업 현황은 백업 보존 기간 설정 쪽에서 확인하십시오.
어떤 권한이 필요합니까?
`DBCC SQLPERF(LOGSPACE)`와 `sys.dm_db_log_space_usage`에는 VIEW SERVER STATE가 필요합니다. `sys.databases`는 메타데이터 가시성 규칙을 따르므로, 권한이 없는 데이터베이스는 결과에 나타나지 않습니다.
로그를 축소하면 해결됩니까?
아닙니다. 축소는 크기를 되돌릴 뿐, 로그가 해제되지 않는 원인에는 작용하지 않습니다. `log_reuse_wait_desc`가 나타내는 요인을 해소하지 않으면 축소해도 로그는 다시 확장됩니다.
FULL과 SIMPLE 중 어느 것을 선택해야 합니까?
업무 요구사항에 따라 결정됩니다. 장애 시 임의 시점까지 복구해야 한다면 FULL과 로그 백업 운영이 세트로 필요합니다. 일일 백업 시점까지만 복구하면 충분하다면 SIMPLE도 선택지이지만, 시점 복구가 불가능해진다는 점에 대해 업무 측의 합의가 필요합니다.
결과를 어떻게 판단합니까?
사용률이 높다는 것 자체는 비정상이 아닙니다. 몇 분 간격으로 가져와도 사용률이 내려가지 않고, `log_reuse_wait_desc`가 NOTHING 이외로 고정되어 있는 경우에 그 값이 나타내는 요인을 조사 대상으로 합니다.
この文書がカバーする質問
- SQL Server의 트랜잭션 로그가 줄지 않는 원인을 알고 싶다
- log_reuse_wait_desc 값의 의미를 찾고 싶다
- RDS for SQL Server에서 로그 백업은 어떻게 되는지
リスク表示の意味
- 参照のみデータと設定を変更しません。
- 低影響は限定的ですが、権限と負荷の確認が必要です。
- 中性能・ロック・コストに影響する可能性があります。
- 高障害・データ損失・復旧作業が発生する可能性があります。
- 専門家レビュー必須本番適用前に別途レビューが必須です。
GIIPの対応範囲
로그 사용률 확인 자체는 위 SQL을 한 번 실행하면 끝납니다. 어려운 점은 여러 인스턴스에 대해 이를 지속적으로 수행하며, `log_reuse_wait_desc`가 NOTHING 이외로 바뀌는 순간을 포착하는 것입니다. GIIP에서는 AWS·Azure상의 여러 데이터베이스를 대상으로 AI 에이전트가 정기적으로 상태를 가져오고, 임계값을 초과한 변화만 담당자에게 전달하는 운영을 하고 있습니다. 로그 비대화처럼 "알아챘을 때는 쓰기가 멈춰 있는" 종류의 사건은 값 자체보다 변화 감지가 대응 시간을 좌우합니다.
執筆・技術検証
GIIP プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。
DBCC SHRINKDATABASE와 DBCC SHRINKFILE의 차이와 실행 전 확인 사항
데이터베이스 전체를 대상으로 하는 SHRINKDATABASE와, 파일 단위의 SHRINKFILE의 차이, TRUNCATEONLY의 사용 시점, 실행 전에 확인해야 할 항목을 정리합니다.
sql-serverSQL Server에서 장시간 열려 있는 트랜잭션을 확인하는 SQL
sys.dm_tran_active_transactions 계열 DMV로 시작 시각·세션·마지막 실행 SQL까지 포함하여 방치된 트랜잭션을 특정하는 절차입니다.
sql-serverSQL Server의 CDC에서 로그 스캔이 멈추지 않았는지 확인하는 방법
sys.dm_cdc_log_scan_sessions와 cdc.lsn_time_mapping, 캡처 작업의 상태로부터 CDC의 로그 스캔이 진행되고 있는지 확인하는 절차입니다.
sql-serverSQL Server에서 MSrepl_commands가 계속 늘어나는 원인과 복제 지연 확인 방법
배포 데이터베이스의 명령 적체를, 배포 에이전트의 동작 현황과 클린업 작업·보존 기간의 양면에서 구분하는 절차입니다.
関連サービス
로그 비대화 긴급 대응을 요청하기
同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。
로그 비대화 긴급 대응을 요청하기