SQL Server 트랜잭션 로그 아키텍처(2/4)

– 트랜잭션 로그 물리 아키텍처

 

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

 

트랜잭션 로그는 데이터베이스의 무결성 보장 및 복구를 위해 사용된다. 물리적 아키텍처를 이해하면 트랜잭션 로그를 보다 효울적으로 관리 할 수 있다.

 

데이터베이스의 트랜잭션 로그는 하나 이상의 물리적 파일에 매핑 된다. 개념상으로 로그 파일은 로그 레코드의 문자열이다. 실제 로그 레코드의 시퀀스는 트랜잭션 로그를 구현하는 물리적 파일 집합에 효율적으로 저장 된다.

 

SQL Server 데이터베이스 엔진은 내부적으로 각 물리 로그 파일을 여러 개의 가상 로그 파일로 나눈다. 가상 로그 파일의 크기는 고정되어 있지 않으며 물리 로그 파일에 대해 고정된 수의 가상 로그 파일 있는 것도 아니다.

데이터베이스 엔진은 가상 로그 파일을 만들거나 확장 할 때 로그 파일의 크기를 선택 한다. 데이터베이스 엔진은 적은 수의 가상 파일을 유지하려고 한다. 로그 파일 확장 후 가상 로그파일 크기는 기존 로그 크기와 새 파일 증가 크기를 합한 크기 이다.

 

관리자가 가상 로그 파일의 크기 또는 수를 구성하거나 설정 할 수 없다.

 

가상 로그 파일이 많이 생성 될수록 데이터베이스 시작 뿐만 아니라 백업 및 복원 작업이 느려질 수 있다. 따라서 필요한 최대 크기만큼 Size 값을 할당하고 증가시 growth_increment 값을 비교적 크게 지정하는 것이 좋다.

 

로그 파일 증가 및 확장은 스토리지의 환경에 따라 다르므로 반드시 본인이 관리하는 스토리지의 특성 및 비즈니스 성향을 고려하여 정하도록 한다.

 

트랜잭션 로그 파일은 순환 파일이다. 한 개의 물리 파일에 4개의 가상 로그 파일이 있다고 가정 하였을 때 데이터베이스가 생성될 때 물리 로그파일의 시작 부분에서 논리 로그 파일이 시작 된다. 새 로그 레코드는 논리 로그의 끝 부분에 추가되며 물리 로그의 끝 방향으로 확장 된다.

로그잘림을 수행 하면 모든 레코드가 MinLSN(최소 복구 로그 시퀀스 번호)앞에 있는 가상 로그에 대한 공간이 확보 된다. MinLSN은 데이터베이스 롤백에 필요한 가장 오래된 로그 레코드의 로그 시퀀스 번호이다.

 

 

다음 그림은 논리 로그의 끝 부분이 물리 로그 파일의 끝 부분에 도달하면 새 로그 레코드는 물리 로그 파일의 시작 부분으로 순환한다. 이 순환은 논리 로그 끝 부분이 논리 로그의 시작 부분에 도달하지 않는 한 계속 반복 된다.

 

 

기존 레코드가 자주 잘리면 로그가 가득 차지 않는다. 그러나 논리 로그의 끝 부분이 논리 로그의 시작 부분에 도달하면 로그가 가득 차게 된다. 이때 파일 증가 설정이 되어 있으면 물리적으로 로그 파일을 확장하고 논리 로그가 생성된다. 만약 물리적인 공간이 부족하여 증가를 하지 못하게 되면 9002 오류가 발생 한다.

 

로그에 물리 로그 파일이 여러 개 있으면 논리 로그는 모든 물리 로그 파일을 거친 후 첫 번째 물리로그 파일의 시작 부분으로 순환된다.

 

가상 로그 파일(VLF)에 대한 성능은 다음 아티클을 참고 한다.

VLF 환경과 성능 : http://sqlmvp.kr/140164396941

[SSMS에서 로그 파일 추가 및 증가 옵션 수정]

[데이터베이스 속성] – [파일] 탭에서 추가 버튼을 이용하여 로그 파일을 추가 할 수 있으며 자동 등가의 속성을 설정 할 수 있다.

[가상 로그 활성 상태 보기]

다음 스크립트를 실행 하면 현재의 가상 로그파일을 확인 할 수 있다. Status 값이 2인 상태가 현재 활성화된 가상 로그 이며 이론상 status 값이 한 개만 존재하는 것이 좋다.

dbcc loginfo(SW_TEST)

[참고 자료]

http://msdn.microsoft.com/ko-kr/library/ms179355(v=sql.105).aspx

http://sqlmvp.kr/140164396941

 

 


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

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38111
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20672
1774 SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 jevida(강성욱) 2016.09.28 1504
1773 DMV를 이용한 캐시된 저장 프로시저 통계 정보 확인 jevida(강성욱) 2016.09.28 1059
1772 SQL Server 쿼리 처리 아키텍처_저장 프로시저 및 트리거 실행 jevida(강성욱) 2016.09.27 992
1771 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (4/4) – 분산형 분할 뷰(View) 확인 jevida(강성욱) 2016.09.27 1391
1770 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인 jevida(강성욱) 2016.09.27 1024
1769 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 jevida(강성욱) 2016.09.27 1503
1768 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables jevida(강성욱) 2016.09.27 988
1767 SQL Server DMV를 이용한 통계 정보 확인 jevida(강성욱) 2016.09.27 2236
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1276
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1155
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1448
1763 SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1154
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1224
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1600
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1110
» SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1159
1758 SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1302
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 854
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1190
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 1043





XE Login