Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  로그는 어떻게 쓰여질까? 
작성일시 : 2008. 1. 15. 17:04 | 분류 : SQL Server/Kernel

DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218)
DB
공부하기 2번째 : 트랜잭션 프로세싱 (http://maystyle.tistory.com/219)
DB 공부하기 3번째 : 데이터 파일과 트랜젝션 로그 파일
1. 왜 DB의 단편화가 일어나는 걸까? (http://maystyle.tistory.com/220)
2. 데이터 파일은 어떻게 쓰여질까? (Checkpoint) (http://maystyle.tistory.com/221)
3. 로그는 어떻게 쓰여질까?

변경된 모든 것들은 버퍼 관리자에 의해 트랜잭션 로그로 "미리 기록"된다.이것은 변경된 데이터 페이지가 기록되기 전에 트랜잭션을 위한 로그 레코드가 항상 디스크에 기록된다는 것을 의미한다. 미리 쓰기 로깅은 Hard Disk가 고장나지 않는 한 서버가 완전히 망가진 상태에서도 복구 할 수 있도록 해 준다. 트랜잭션이 디스크의 트랜잭션 로그에 들어 있지 않으면 프로세스는 결코 트랜잭션이 커밋되었다는 것을 통보 받지 못한다. 이런 이유로 트랜잭션 로그 기록은 동기적으로 이루어진다. 데이터 페이지에 기록되는 것은 통보를 기다리지 않고 비동기적으로 이루어 질 수 있다. 만약 고자장 나면 트랜잭션 로그에 있는 정보를 사용하여 트랜잭션을 취소하거나 다시 수행할 수 있다.

로그 관리자는 트랜잭션 로그 레코드를 디스크에 기록하기 전에 메모리 내에서 이것의 형식을 지정한다. 로그 관리자는 이 로그 레코드들의 형식을 지정하기 위해 로그 캐시라고 불리는 연속된 메모리 영역을 유지한다. SQL Server 에서 로그 레코드는 데이터 페이지 및 인덱스 페이지와 버퍼 풀을 공유하지 않는다. 로그 레코드는 로그 캐시에만 유지된다.

로그 관리자는 이 캐시를 2개를 가지고 하나씩 채우고 비우고 하는 형식으로 보관하고 로그 기록자 (log writer)는 캐쉬가 비워질때 flushQueue를 조사하면서 로그 캐시를 한번에 디스크로 보내는 전용 스레이드 이다.

종합하자. 일단 데이터 파일에 저장되는 경우에는 Check Point를 만나는 경우다. 로그에 기록되는 경우는 로그 캐쉬의 내용이 Flush되는 순간이다. 보통은 거의 동기적으로 이루어진다.

+ @
로그는 VLF 라는 저장단위로 구성된다. 가상 로그 파일의 최소 단위는 256KB로써, 토랜잭션 로그가 가장 작은 크기인 512KB일때 두개의 가상로그 파일로 구성되며, 처음에 로그 파일을 500MB로 만들면 50MB의 가상로그 파일 10개로 구성된다. 그리고 이런 로그 파일은 circular queue 처럼 동작하는데... 문제는 이 로그 파일이 조금씩 증가하면 작은 가상 로그 파일들이 많이 만들어지고, 이것은 성능에 않좋은 영향을 미친다는 것이다. 10MB 단위로는 늘려주자...^^v

|