본문 바로가기

DB(SQL)/mysql|maria

[mysql] 캐시 적중률 확인하기

반응형

db에는 자주 사용되는 테이블들을 캐시에 저장해놓고 더욱 빠르게 제공을 하려고한다.

 

이때 캐시에 들어있는 데이터를 많이 사용할수록 캐시 적중률이 높아진다.

 

mysql은 Table_open_cache_hits, Table_open_cache_misses,Table_open_cache_overflows 을 가지고 캐시 적중률을 확인할 수 있다.

SHOW GLOBAL STATUS LIKE 'Table_open_cache_%';

 

예를 들어 아래와 같이 조회 되었을 경우 아래와 같이 해석이 가능하다.

 

  • Table_open_cache_hits: 3,175,551
    • 테이블 캐시에서 성공적으로 테이블을 찾은 횟수.
    • 높은 숫자는 캐시 적중률이 양호하다는 의미입니다.
  • Table_open_cache_misses: 2,570
    • 캐시에서 테이블을 찾지 못해 디스크에서 새로 열어야 했던 횟수.
    • 캐시가 충분하지 않을 때 발생하며, 이 값이 높다면 캐시 설정을 조정할 필요가 있습니다.
  • Table_open_cache_overflows: 622
    • 캐시가 꽉 차서 이전에 열린 테이블을 제거해야 했던 횟수.
    • 캐시 크기가 작은 경우, 불필요한 테이블 교체로 인해 성능 저하가 발생할 수 있습니다.

적중률 계산

적중률 (%) = (Table_open_cache_hits / (Table_open_cache_hits + Table_open_cache_misses)) * 100 = (3,175,551 / (3,175,551 + 2,570)) * 100 ≈ 99.92%

 

조치 필요 여부

  • 현재 적중률이 높고, misses와 overflows의 수치가 적당히 관리 가능한 수준입니다. 하지만:
    • 트래픽이 더 증가할 경우 table_open_cache 크기를 늘려야 할 가능성이 있습니다.
    • 특히, 오버플로우가 0에 가까운 상태가 이상적이므로 상황에 따라 캐시 크기를 소폭 늘리는 것을 고려하세요.

table_open_cache 가 높은데도 불구하고 트래픽이 증가할 경우

  • 비효율적인 쿼리 사용:
    • 짧은 시간에 너무 많은 테이블을 열거나, 불필요하게 여러 테이블을 사용하는 쿼리가 많을 수 있습니다.
    • 특히, JOIN이나 서브쿼리에서 불필요하게 테이블을 반복적으로 여는 경우가 문제가 될 수 있습니다.
  • 테이블 캐시 정리 정책:
    • MySQL은 오래된 테이블을 캐시에서 제거해 새로운 테이블을 열도록 설정되어 있습니다.
    • 기본적으로 LRU(Least Recently Used) 방식으로 캐시된 테이블을 관리하므로, 특정 테이블이 자주 호출되지 않으면 캐시에서 빠지게 됩니다.

 

반응형