2009년 12월 24일 목요일

Checkpoint

Checkpoint는 검사점이라고 불리우는 것으로 SQL Server가 시작할때 수행해야 할 복구 작업을 최소화 시킨다. 검사점은 데이터베이스별로 실행되며 이것은 현재 데이터베이스에서 변경된 페이지들을 디스크에 기록한다.

전체복구시 로그에는 시스템이 중지되기 전에 데이터가 수정되었으나 디스크로 플러시 되지 않은 내용이 있을 수 있습니다. 이러한 수정내용은 롤포워드 되야합니다.
또 커밋 또는 롤백 로그 레코드가 없는 모든 불완전한 트랜잭션은 롤백 되어야 합니다.

검사점 작업시에는 다음과 같은 프로세스를 수행한다.
- 검사점의 시작을 표시하는 레코드를 로그 파일에 쓴다.

- 검사점 로그 레코드의 체인에 검사점에 대해 기록된 정보를 저장합니다.
검사점 레코드에 기록되는 한 가지 정보는 성공적인 데이터베이스 차원의 롤백을 위해 반드시
존재해야 하는 첫 번째 로그 레코드의 LSN입니다. 이 LSN을 최소 복구 LSN(MinLSN)이라고
하며 다음 중에서 가장 작은 값입니다.
- 검사점 시작의 LSN
- 가장 오래된 활성 트랜잭션 시작의 LSN
- 아직 배포 데이터베이스로 전달되지 않은 가장 오래된 복제 트랜잭션 시작의 LSN
검사점 레코드에 기록되는 또 다른 정보는 데이터베이스를 수정한 모든 활성 트랜잭션 목록입니다.

- 데이터베이스에서 단순 복구 모델을 사용할 경우 MinLSN 앞에 나오는 공간을 다시 사용하도록 표시합니다.

- 커밋되지 않은 모든 로그와 데이터 페이지를 디스크에 씁니다.

- 검사점의 끝을 표시하는 레코드를 로그 파일에 씁니다.

- 이 체인의 시작 LSN을 데이터베이스 부팅 페이지에 씁니다.

Pintable

페이지들이 여유목록에 들어가지 않고 메모리에 무한정 유지되도록 특별히 테이블들에 표시할 수 있다.
그러나 너무 많은 테이블들을 고정시키면 새 버퍼가 필요할때 사용 가능한 페이지들이 없을 수 있다. 일반적으로, 시스템 메모리가 충분하고 어느 테이블이 자주 엑세스 될지 아는 경우에 사용 되어야 한다.
명령어로는 2000까지는 DBCC PINTABLE과 SP_TABLEOPTION으로 가능했으나 2005부터는 심한 부작용을 초래할 수 있어 제거되었다.

Lazywriter

버퍼 풀은 Lazywriter라고 불리는 프로세스에 의해 관리된다.
Lazywriter는 버퍼풀을 관리하기 위해 시계알고리즘을 사용한다.
Lazywriter 스레드는 버퍼 풀을 가리키는 포인터를 관리하고, 이것은 버퍼풀을 연속적으로
정리한다. Lazywriter는 각 버퍼를 방문할 때 버퍼 헤더에 있는 참조 카운트 값을 조사함으로써
버퍼가 마지막으로 비워진 이후에 참조되었는지 알아낸다. 참조 카운트가 0이 아니면
버퍼는 풀에 머물르고, 참조카운트 값은 다음번에 비워질 것을 대비하여 줄어든다.
참조 카운트가 0이면 버퍼는 재사용 될 수 있다(이때 변경된 것이 있으면 디스크로 기록하고 해시목록에서 제거하며 여유 목록(free list)라고 불리는 특별한 버퍼 목록에 들어간다.)

버퍼의 내용이 프로세스에 의해 엑세스 될 때마다 버퍼의 참조 카운트는 데이터 페이지 인덱스 페이지의 경우 1씩 증가한다. 저장 프로시저 계획과 같이 복잡한 개체들은 더 큰 참조 카운트를 얻는다.

여유 목록에 있는 페이지의 수가 최소 크기 이하로 내려갈 때 Lazywriter가 버퍼 풀을 청소한다. 최소 크기는 전체 버퍼 풀 크기의 백분율로 계산되지만, 항상 128KB~4MB사이에 있다. SQL Server 2000은 시스템 부하와 발생하는 스톨(stall)의 수에 근거하여 필요한 여유 페이지들을 추정한다. 프로세스에게 여유 페이지가 필요한데 여유페이지가 없으면 스톨이 발생한다.

프로세스에게 여유페이지가 필요한데 여유 페이지가 없으면 스톨이 발생한다. 프로세스는 Lazywriter가 페이지들을 해제해 주기를 기다린다. 많은 스톨이 발생하면(즉, 초당 3-4개 이상이 발생하면) SQL Server가 여유 목록의 최소 크기를 증가시킨다. 시스템 부하가 작고 스톨이 거의 발생하지 않으면 최소 여유 목록 크기가 줄어들고, 남는 페이지들이 추가로 데이터 페이지와 인덱스 페이지 또는 쿼리 계획을 해싱하는 데 사용될 수 있다. 성능 모니터는 여유 페이지의 수뿐 아니라 발생한 스톨의 수까지 조사할 수 있게 해주는 카운터를 갖고 있다.



-- 출처 : Inside Microsoft sql server 2000