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

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

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
1770 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (3/4) – 뷰(View)의 인덱스 확인 jevida(강성욱) 2016.09.27 973
1769 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (2/4) – 뷰(View) 확인 jevida(강성욱) 2016.09.27 1447
1768 SQL Server 쿼리 처리 아키텍처 _ SQL 문 처리 (1/4) – SQL 문 최적화 및 Worktables jevida(강성욱) 2016.09.27 933
1767 SQL Server DMV를 이용한 통계 정보 확인 jevida(강성욱) 2016.09.27 1470
1766 DMV를 이용한 플랜 캐시 사용 정보 확인 jevida(강성욱) 2016.09.27 1172
1765 SQL Server 테이블 및 인덱스 구조 아키텍처(4/4) – 비클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1065
1764 SQL Server 테이블 및 인덱스 구조 아키텍처(3/4) – 클러스터형 인덱스 구조 jevida(강성욱) 2016.09.27 1367
1763 SQL Server 테이블 및 인덱스 구조 아키텍처(2/4) – 힙 구조 jevida(강성욱) 2016.09.27 1068
1762 SQL Server 테이블 및 인덱스 구조 아키텍처(1/4) – 테이블 및 인덱스 구성 jevida(강성욱) 2016.09.27 1125
1761 SQL Server 트랜잭션 로그 아키텍처(4/4) – 미리 쓰기 트랜잭션 로그 jevida(강성욱) 2016.09.27 1537
1760 SQL Server 트랜잭션 로그 아키텍처(3/4) – 검사점 및 로그의 활성 부분 jevida(강성욱) 2016.09.27 1048
» SQL Server 트랜잭션 로그 아키텍처(2/4) – 트랜잭션 로그 물리 아키텍처 jevida(강성욱) 2016.09.27 1094
1758 SQL Server 트랜잭션 로그 아키텍처(1/4) – 트랜잭션 로그 논리 아키텍처 jevida(강성욱) 2016.09.27 1249
1757 파일 및 파일 그룹 아키텍처 jevida(강성욱) 2016.09.27 798
1756 SQL Server 페이지 및 익스텐트 아키텍처(4/4) – 수정된 익스텐트 추적 jevida(강성욱) 2016.09.27 1128
1755 SQL Server 페이지 및 익스텐트 아키텍처(3/4) – 개체에서 사용하는 공간 관리 jevida(강성욱) 2016.09.27 972
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1362
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3162
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2177
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5123





XE Login