CHECKPOINT Buffer Pool 커밋되지 않은 페이지를 디스크로 플러시를 하는 프로세스 입니다.

 

CHECKPOINT DB단위로 발생하며, 발생 주기는 recovery interval 옵션의 값을 기반으로 움직이게 됩니다.

CHECKPOINT 발생시 커밋되지 않은 페이지를 디스크로 페이지를 플러시 하며, CHECKPOINT 발생한 시점에 트랜잭션 로그파일도 마킹을 하여

비정상적인 종료시 마지막 CHECKPOINT 이후의 트랜잭션 로그를 바탕으로 데이터를 롤백 또는 롤포워드 하게됩니다.

 

CHECKPOINT 발생시 IO 병목이 발생 있으며 이러한 문제의 해결에 도움을 있는 몇가지 기능이 SQL Server 2005 추가되었습니다.

1.  CHECKPOINT Duration

è  수동 CHECKPOINT발생시 Duration 시간을 지정 있습니다.

BP 있는 내용을 최대한 빨리 내릴경우에는 Duration 1 지정 있으며

자동 Checkpoint 성능적 문제가 발생한 경우 수동 Checkpoint Duration값을 적절히 설정하면

천천히 페이지를 플러시 하여 IO 급격한 요청을 피해 전반적인 성능 향상을 꾀할 있습니다.

 

2.     -k 옵션 (http://support.microsoft.com/default.aspx/kb/929240)

è  SP2 누적 픽스 까지 설치하면 –k 시작 옵션을 사용할 있습니다.

해당 옵션은 초당 얼마의 IO작업을 할것인지 지정 있으며 만약 –k100으로 설정 하였다면

초당 100MB의 IO작업이 발생하게 됩니다.

Duration처럼 CHEKCPOINT 병목에 대해서 해결시 사용할 있습니다.

보다 자세한 내용은 KB문서를 참고 하세요.

 

3.  CHECKPOINT IO응답시간 20ms 이내, 서버 종료시는 100ms

è  2000 경우에는 Checkpoint 작업시 DISK병목 현상이 발생될 있었지만

2005 경우에는 Write 응답시간을 20ms 또는 100ms으로 지정하여 기존 버전보다 IO병목 현상에 대해 향상 되었습니다.

 

4.  연속된 32개의 페이지를 하나의 IO 처리(기존 SQL Server 2000에는 16페이지)

è  보통 DISK 랜덤IO 작업에 성능이 급격히 떨어지게 됩니다.

여러 개의 페이지를 하나의 IO작업으로 처리하면 보다 빨리 CHECKPOINT작업이 처리 있습니다.

2000 경우에는 16개의 페이지 였지만 2005 경우에는 32개의 페이지를 하나의 IO 처리 있습니다.

 

CHECKPOINT IO성능에 가장 이슈가 되는 프로세스이며, 조금 살펴보면 재미 있는 이슈가 많습니다.

조만간 아래 주제에 대한 글을 포스팅 하도록 하겠습니다.

 

1.  연속적, 랜덤한 데이터 변경에 대한 CHECKPOINT 성능 비교

2.  CHECKPOINT 발생시키는 이벤트

3.  IO Subsystem 성능에 따른 CHECKPOINT

4.  매뉴얼 CHECKPOINT,-k 시작 옵션, Duration 언제 사용할까?

5.  DBCC DROPCLEANBUFFERS 수행하면 모든 페이지가 정말 Buffer Pool에서 사라질까?

 

, SQL Server MVP

sqler.pe.kr

sqlleader.com

hyoksong.tistory.com

nexondbteam.tistory.com

신고
Posted by 송혁 - HyokSong
TAG Checkpoint, IO, SQL

SQL Server 기본적으로 제공하는 백업, 복구 조금 느린감이 없지 않습니다.

느린 이유중의 가장 큰 원인은 IOSubsystem에서의 병목이 대부분입니다.
보통 이러한 문제는 초당 전송되는 양 보다 IO 요청 수로 인해 성능적 문제가 발생하고 있습니다. 보다 많은 데이터를 빠르게 이동하기 위해서는 보다 큰 블록을 사용하여 전송한다면 보다 많은 데이터를 빠르게 옮길 수 있습니다. (일반적인  내용입니다. 모든 시스템에 이와 같은 문제가 발생하는 것은 아님)

이러한 문제로 인해 대용량의 데이터를 빠르게 복구 및 백업을 하기 위해서 하드웨어에서 제공하는 백업 및 snap등의 솔루션등을 사용하고 있습니다.

하지만, 이것도 돈이 많이 드는 솔루션이라 쉽게 도입하기는 쉽지 않습니다.
그럼, SQL Server 2008에서 압축 백업, 복원을 기능을 사용한다면?
분명 지금보다 빠르지만, 현재 SQL Server 2000, 2005에서 할 수 있는 방법은?

2005 BOL 에서 Backup, Restore 부분을 보시면 MAXTRANSFERSIZE를 설정 할 수 있습니다.(SQL Server 2000 도 가능)

MAXTRANSFERSIZE = { maxtransfersize | @maxtransfersize_variable }
SQL Server와 백업 미디어 간에 사용되는 가장 큰 전송 단위(바이트)를 지정합니다. 가능한 값은 최대 4194304바이트(4MB)까지 65536바이트(64KB)의 배수입니다.

이 옵션은 아래와 같이 memtoleave의 조각화로 인한 오류 발생시 작은 블록으로 전송하여 문제를 해결 할 수 도 있습니다.
Downgrading backup buffers from 960K to 64K

이 옵션은 기본값은 1MB이며, 최대 4MB 설정 할 수 있습니다.
해당 수치를 명시적으로 사용한다고 하더라도 받듯이 설정된 크기로 전송 하지는 않습니다.
주의해야 할 사항은 백업 및 복구는 Memtoleave 영역의 메모리를 사용하며 최소 블록 단위보다 큰 연속된 메모리 공간이 필요합니다.
Memtoleave 가 많이 조각화난 상태인 32bit환경에서는 4MB설정 후 작업시 오류가 발생 할 수 있습니다.
보다 많은 Memtoleave 영역을 가지고 있는 64bit 환경 및 조각화 상태가 적은 32bit 환경이라면, 테스트 할 가치가 충분히 있을 것이라 생각됩니다.

<
4MB, 1MB 백업 테스트>



송 혁, SQL Server MVP
sqler.pe.kr
nexondbteam.tistory.com

신고
Posted by 송혁 - HyokSong
요즘.. IO관련해서 찾아보던 중 SSD(Solid State Disk)이라는 것에 대해 다시 보게 되었습니다.

이전에는 Nand  메모리를 DISK같이 사용하는..
그래서 노트북과 같은 모바일 디바이스에서 저전력과 고성능을 가질 수 있다는 장점만을 알고 있었는데

아래의 사이트를 보니 SSD를 이용하여 SAN 스토리지를 만들어서 팔고 있네요.
잠깐 뒤져보니 Random 엑세스에서 엄청난 IOPS를 보여주고 있는데..오옷!!

아마 2~3년 후면 이녀석이 DBMS의 IO Subsystem의 대세를 이루지 않을까 하는 생각이...
http://www.superssd.com/products_sub.htm

64GB SATA 인터페이지 지원하는 SSD도 나왔다고 하는데 SAS컨트롤러에서 바로 인식 가능하니~우리도 도입을 고려해보는건 어떨까요?

송혁 /  HyokSong
신고
Posted by 송혁 - HyokSong
TAG IO, IOPS, SSD