레이블이 아키텍쳐인 게시물을 표시합니다. 모든 게시물 표시
레이블이 아키텍쳐인 게시물을 표시합니다. 모든 게시물 표시

2009년 12월 24일 목요일

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