버퍼 캐시 히트율 공식 (BCHR)
= (캐시에서 곧바로 찾은 블록 수 / 총 읽은 블록 수)100
= ((논리적 블록 읽기 - 물리적 블록 읽기) 논리적 블록읽기) 100
= (1 - (물리적 블록 읽기) / (논리적 블록읽기) * 100)
- '논리적 블록읽기' = '총 읽은 블록 수'
- '논리적 블록읽기' = SQL을 수행하는 동안 캐시에서 읽은 총 블록 수
- '캐시에서 곧바로 찾은 블록 수' = '논리적 블록읽기' - '물리적 블록 읽기'
================================================================================
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 0 178 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 178 0 1
================================================================================
BCHR의 한계점
- 같은 블록을 반복적으로 액세스하는 형태의 Appplication일 경우 논리적인 I/O요청이 비효율적으로 많이 발생하는데도 BCHR은 높게 나타날 수 있다.
- 작은 테이블을 자주 액세스하면 모든 블록이 메모리에서 찾아지므로 BCHR는 높겠지만 블록을 찾는 과정에서 래치를 얻어야 하므로 큰 비용을 수반한다.
- 같은 블록을 여러 세션이 동시에 액세스함으로 인하여 래치 경합과 버퍼 Lock 경합까지 발생하면 메모리 I/O 비용이 디스크 I/O 이상으로 커질 수 있다.
- BCHR가 100%라고 하더라도 논리적으로 읽어야 할 블록 수의 절대량이 많다면 반드시 SQL 튜닝을 실시해야 한다.