[MS-SQL] Buffer cache hit ratio 체크
정상수치는 99% 이상되야합니다.
SELECT (a.cntr_value * 1.0 / b.cntr_value) * 100.0 [BufferCacheHitRatio]
FROM (SELECT *, 1 x FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio') a ,
(SELECT *, 1 x FROM sys.dm_os_performance_counters
WHERE counter_name = 'Buffer cache hit ratio base') b
MS Server에 Cache Hit Ratio라는 항목이 있습니다. 이것은 간단히 말해서 캐쉬의 적중률로 알고 있습니다. (필자 생각)
그런데 이게 높으면 왜 좋고 낮으면 왜 않좋은지 알고 싶어서 찾던 도중 좋은 글을 발견해서 이해 한 대로 설명하겠습니다.
1. Database의 Buffe Cache는 Disk로 부터 읽어들인 Data block의 복사본을 가지고 있는 메모리 입니다.
2. 다음과 같이 Disk로 부터 파일을 읽어 들여서 Data Block의 복사본을 가지고 있는 메모리 입니다
3. 다음과 같이 User Process가 요구한 사항을 Server Process 가 받아서 DB Buffer Cache에서 Data를 찾게 될 시에 만약에 Data block1 을 찾을 경우 cache hit 이며 Data block6을 찾을 경우 cache miss라고 합니다.
Cache Hit : User Process 가 요구하는 데이터 있을 경우
Cache Miss : User Process 가 요구하는 데이터 없을 경우
만약에 여기서 cache miss가 날 경우에는 다음과 같은 상황이 발생합니다
다음과 같이 Server Process가 직접 Disk에 가서 필요한 Data를 찾은 후에 직접 DB Buffer cache에 올려 줍니다.
결국 위의 설명과 함께 보시면 Cache Hit Ratio 는 아주 간단 합니다. 즉 3번의 해당하는 그림(바로 Buffer cache에서 찾는거)에서 처럼 Disk 로 부터 Data를 읽어서 메모리에 올린 것이 아닌 DB Buffer Cache 에서 바로 읽혀진 비율을 말합니다
출처 : http://blog.naver.com/waws01/60191256351
Buffer Manager/Buffer Cache Hit Ratio
오라클의 내용을 보고 이해 한 글이므로 사실과 다를수 있습니다. MS Server...
blog.naver.com
[SQL Server Buffer Manager 카운터]
Buffer cache hit ratio
디스크에서 읽지 않고 버퍼 캐시에서 찾은 페이지 비율을 나타냅니다. 이 비율은 마지막 몇 천 페이지 액세스에 대한 총 캐시 조회 수로 나눈 총 캐시 적중 수입니다. 시간이 많이 지나면 이 비율은 일정해집니다. 캐시에서 읽는 것이 디스크에서 읽는 것보다 비용이 적게 들기 때문에 이 비율을 높이는 것이 좋습니다. 일반적으로 SQL Server에 사용할 수 있는 메모리 양을 늘리거나 버퍼 풀 확장 기능을 사용하여 buffer cache hit ratio를 높일 수 있습니다.
Checkpoint pages/sec
모든 더티 페이지를 플러시해야 할 기타 작업이나 검사점에 의해 디스크에 플러시된 초당 페이지 수를 나타냅니다.
Database pages
버퍼 풀에서 데이터베이스 내용이 있는 페이지 수를 나타냅니다.
Extension allocated pages
버퍼 풀 확장 파일에서 이미 사용된 캐시 페이지의 총 수입니다.
Extension free pages
버퍼 풀 확장 파일에서 사용되지 않은 캐시 페이지의 총 수입니다.
Extension in use as percentage
버퍼 관리자 페이지가 차지하는 버퍼 풀 확장 페이징 파일의 비율입니다.
Extension outstanding IO counter
버퍼 풀 확장 파일에 대한 I/O 큐 길이입니다.
Extension page evictions/sec
초당 버퍼 풀 확장 파일에서 제거되는 페이지 수입니다.
Extension page reads/sec
초당 버퍼 풀 확장 파일에서 읽어오는 페이지 수입니다.
Extension page unreferenced time
페이지가 참조되지 않은 채 버퍼 풀 확장에 남아 있는 평균 시간(초)입니다.
Extension pages writes/sec
초당 버퍼 풀 확장 파일에 쓰여지는 페이지 수입니다.
Free list stalls/sec
사용 가능한 페이지를 기다린 초당 요청 수를 나타냅니다.
Lazy writes/sec
버퍼 관리자의 지연 기록기가 기록한 초당 버퍼 수를 나타냅니다. 지연 기록기는 에이징된 더티 버퍼(다른 페이지에 버퍼를 다시 사용하려면 해당 변경 내용을 디스크에 다시 써야 하는 버퍼)의 일괄 처리를 플러시하는 시스템 프로세스이며 이러한 버퍼를 사용자 프로세스에 사용할 수 있게 합니다. 지연 기록기를 사용하면 사용 가능한 버퍼를 만들기 위해 자주 검사점을 수행할 필요가 없습니다.
Page life expectancy
페이지가 참조 없이 버퍼 풀에 남아 있는 시간(초)을 나타냅니다.
Page lookups/sec
버퍼 풀에서 페이지를 찾기 위한 초당 요청 수를 나타냅니다.
Page reads/sec
실행한 물리적 데이터베이스 페이지 초당 읽기 수를 나타냅니다. 이 통계는 모든 데이터베이스에 걸친 총 실제 읽기 수를 나타냅니다. 실제 I/O는 비용이 많이 들기 때문에 용량이 큰 데이터 캐시나 인텔리전트 인덱스, 더 효율적인 쿼리를 사용하거나 데이터베이스 디자인을 바꾸면 비용을 최소화할 수 있습니다.
Page writes/sec
실행한 물리적 데이터베이스 페이지 초당 쓰기 수를 나타냅니다.
Readahead pages/sec
사용을 미리 예측하여 읽은 초당 페이지 수를 나타냅니다.
출처 : https://msdn.microsoft.com/ko-kr/library/ms189628.aspx