데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

LDF 파일이 잘리지 않는 이유

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server에는 데이터를 저장하는 MDF 파일과 트랜잭션 로그라 불리는 로그 파일을 기록하는 LDF 파일이 있다. SQL Server와 관련된 커뮤니티의 질문을 보면 다음과 같은 질문이 많이 있다.

 

"데이터 파일은 10GB인데 로그 파일이 300GB에요. 왜 파일이 점점 커지는 걸까요?"

 

트랜잭션로그(LDF) 파일이 증가하는 원인은 몇 가지가 있다. 그리고 많은 DBA들이 오해하는 부분이 있는데 대부분의 책을 보면 데이터베이스의 복구 모델이 [단순]일 경우 트랜잭션로그가 쌓이지 않는다고 하는데 이 부분은 반은 맞고 반은 틀린 이야기이다.

 

데이터베이스의 복구모델이 [단순]일 경우에도 요청 작업(트랜잭션)에 대해서 트랜잭션 로그를 기록한다. 즉 요청 작업이 완료되기 전까지는 트랜잭션 로그가 기록된다. 만약 하나의 요청 작업이 대량의 데이터를 변경하는 작업이라면 트랜잭션 로그가 크게 증가할 것이다.

 

다만 작업이 완료되면 트랜잭션 로그를 비우지만 작업 동안 증가한 로그파일의 물리적인 크기는 줄어 들지 않는다. 하지만 더 큰 트랜잭션 로그가 기록되기 전까지는 계속해서 재사용 되므로 파일 크기는 계속해서 증가하지는 않는다.

 

데이터베이스 복구 모델이 [전체] 모드에서는 다음과 같은 상황에서 로그파일이 증가 할 수 있다.

  1. 대량의 데이터 변경 작업 (INSERT, UPDATE, DELETE)
  2. 데이터베이스 복구 모델을 [전체]로 변경 후 [전체 백업]을 진행 한 경우 (데이터베이스를 생성 후 첫 전체 백업을 수행하기 전까지는 [단순]모드로 동작 함)
  3. 아무도 로그 백업을 수행하지 않는 경우

 

이와 같은 이유로 LDF 파일은 기하 급수적으로 증가 할 수 있다. 만약 파일의 크기 증가 제한이 설정되어 있지 않다면 디스크를 가득 채울 때까지 증가하여 서비스가 중단되는 현상 경험할 수도 있다.

 

그렇다면 LDF 파일이 증가 하였을 때 무조건 로그 백업만 수행하면 줄어 들까? 우리가 운영하고 있는 데이터베이스가 미러링이나 복제 등의 고가용성이 구성되어 있는 경우에는? 이 경우는 고가용성 서버 그룹에 대한 영향을 받는다.

 

따라서 로그파일이 증가 하였을 때 왜 로그가 잘리지 않는지를 다음 스크립트를 통해서 알아 보자.

SELECT

    database_id,

    name as database_name,

    [log_reuse_wait_desc]

FROM sys.databases;

GO

 

 

스크립트를 실행한 결과를 살펴보면 [SW_TEST]라는 데이터베이스에서 로그 지우기가 시도된 시점에서 잘리지 않는 이유를 나타낸다. SW_TEST 데이터베이스의 경우에는 [LOG_BAACKUP]이 수행되지 않아 로그가 잘리지 않았다. 로그 백업을 실행하여 로그를 자를 수 있다.

 

로그가 잘리지 않는 이유에 대해서는 다양한 케이스가 있으니 자신이 운영하는 환경을 고려하여 왜 잘리지 않았는지를 확인하고 데이터 파일 증가 및 로그 파일의 증가를 모니터링 하여 장애가 발생하지 않도록 해야 한다.

 

[참고자료]

 

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1830 SQL Server 2012 Sp1 설치 이슈 및 해결 jevida(강성욱) 2016.09.30 1578
1829 SSD에서 DBCC CHECKDB 성능 벤치마킹 jevida(강성욱) 2016.09.30 1932
1828 Collation에 따른 ALTER DATABASE 실패 jevida(강성욱) 2016.09.30 1942
» LDF 파일이 잘리지 않는 이유 jevida(강성욱) 2016.09.30 2054
1826 Tempdb 경합 확인 및 해결 (Tempdb Contention) jevida(강성욱) 2016.09.30 2220
1825 SQL Server IO 병목 확인과 오해 jevida(강성욱) 2016.09.30 2502
1824 SQL Version에 따른 sp_prepare 정보 반환 jevida(강성욱) 2016.09.30 1716
1823 DReplay 활성 세션 초과 에러 jevida(강성욱) 2016.09.30 1542
1822 저장 프로시저 내 임시 테이블 사용과 프로시저 재컴파일 jevida(강성욱) 2016.09.30 1870
1821 NUMA 노드와 추척플래그 8048 jevida(강성욱) 2016.09.30 820
1820 온라인 인덱스 리빌드와 조각화 증가 jevida(강성욱) 2016.09.30 1608
1819 VARCHAR(MAX) and NTEXT 쿼리 성능 jevida(강성욱) 2016.09.30 4476
1818 CPU 리소스 상태에 따른 병렬 처리 제한 jevida(강성욱) 2016.09.30 1077
1817 매개변수 값의 변경과 SQL 서버 성능 저하 jevida(강성욱) 2016.09.30 1271
1816 IN 절 사용시 예기치 못한 액세스 위반과 SQL Server 종료 jevida(강성욱) 2016.09.30 1060
1815 SQL 버전과 CLR (.NET Framework 버전에 따른 오류) jevida(강성욱) 2016.09.30 1189
1814 SWITCHOFFSET 내장함수의 잘 못된 예측 - 미리 계산한 값을 쿼리에 연결하여 최적화 하기 jevida(강성욱) 2016.09.30 1327
1813 테이블 반환 매개변수 사용과 SQL 2012의 향상된 캐싱 기능 jevida(강성욱) 2016.09.30 1233
1812 디스크 섹터 크기와 데이터베이스 성능 jevida(강성욱) 2016.09.29 1636
1811 CLR 사용시 CPU 사용률 증가 현상 jevida(강성욱) 2016.09.29 1761





XE Login