DB 공부하기 1번째 : 선언적 데이터 무결성(Declarative Data Integrity) (http://maystyle.tistory.com/218) 변경된 모든 것들은 버퍼 관리자에 의해 트랜잭션 로그로 "미리 기록"된다.이것은 변경된 데이터 페이지가 기록되기 전에 트랜잭션을 위한 로그 레코드가 항상 디스크에 기록된다는 것을 의미한다. 미리 쓰기 로깅은 Hard Disk가 고장나지 않는 한 서버가 완전히 망가진 상태에서도 복구 할 수 있도록 해 준다. 트랜잭션이 디스크의 트랜잭션 로그에 들어 있지 않으면 프로세스는 결코 트랜잭션이 커밋되었다는 것을 통보 받지 못한다. 이런 이유로 트랜잭션 로그 기록은 동기적으로 이루어진다. 데이터 페이지에 기록되는 것은 통보를 기다리지 않고 비동기적으로 이루어 질 수 있다. 만약 고자장 나면 트랜잭션 로그에 있는 정보를 사용하여 트랜잭션을 취소하거나 다시 수행할 수 있다. 로그 관리자는 트랜잭션 로그 레코드를 디스크에 기록하기 전에 메모리 내에서 이것의 형식을 지정한다. 로그 관리자는 이 로그 레코드들의 형식을 지정하기 위해 로그 캐시라고 불리는 연속된 메모리 영역을 유지한다. SQL Server 에서 로그 레코드는 데이터 페이지 및 인덱스 페이지와 버퍼 풀을 공유하지 않는다. 로그 레코드는 로그 캐시에만 유지된다. 로그 관리자는 이 캐시를 2개를 가지고 하나씩 채우고 비우고 하는 형식으로 보관하고 로그 기록자 (log writer)는 캐쉬가 비워질때 flushQueue를 조사하면서 로그 캐시를 한번에 디스크로 보내는 전용 스레이드 이다. 종합하자. 일단 데이터 파일에 저장되는 경우에는 Check Point를 만나는 경우다. 로그에 기록되는 경우는 로그 캐쉬의 내용이 Flush되는 순간이다. 보통은 거의 동기적으로 이루어진다. |