본문 바로가기
DB

mysql 아키텍쳐[3] - 버퍼풀 자료 구조

by 코딩공장공장장 2025. 2. 7.

버퍼풀 자료구조


버퍼풀은 여러개의 데이터 페이지로 이루어져 있다.

버퍼풀은 메모리 공간에 존재하기에 무한정 많은 데이터를 담고 있을 수 없다.

사용하지 않는 데이터는 제거되야한다.

버퍼풀에서 사용되는 자료구조를 살펴보자.

 

LRU(Least Recently Used) 리스트 : 가장 오래동안 사용되지 않은 데이터 페이지 제거

  • New 서브리스트
    - MRU(Most Recently Used) 알고리즘을 통해 가장 많이 읽힌 데이터들이 존재하는 공간
    - 버퍼풀에 데이터를 읽어들이면 해당 데이터는 리스트의 머리부분으로 이동한다.

  • Old 서브리스트 
    - LRU 알고리즘이 사용되는 공간으로 오랫동안 읽히지 않는 데이터 관리
    - 오랫동안 사용되지 않은 데이터는 나이가 증가하고 꼬리 부분으로 이동된다.

데이터를 디스크에서 처음 버퍼풀로 가져오면 old 리스트에 머리에 위치한다.

이후 사용자에 의해 읽혀지만 new 서브리스트로 이동하고 자주 읽힐수록 머리부분으로 이동하게 된다.

데이터가 읽히지 않으면 꼬리부분으로 점차 이동되고  old 서브리스트의 영역이 37%를 넘어가게되면 꼬리부분 데이터 페이지를 제거하는 작업을 수행한다.

(* LRU 리스트는 효율적인 메모리 관리를 위해 불필요한 클린 데이터 페이지를 삭제하기 위한 자료구조이다.)

 

플러시 리스트

플러시 리스트는 변경사항이 반영한 더티 페이지를 디스크에 반영하기 위한 리스트이다.

체크포인트 발생 이후 디스크에 기록이 되면 더티 페이지는 제거 된다.

(* 플러시 리스트는 더티페이지의 디스크 반영 목적을 위한 자료구조이다.)

 

버퍼풀 플러시


플러시는 버퍼풀이 비워지는 작업을 의미한다.

LRU 리스트의 버퍼풀의 비워지는 작업은 오랫동안 사용되지 않은 클린 데이터 페이지가 삭제되는 것이고,

플러시 리스트의 버퍼풀이 비워지는 작업은 디스크에 더티페이지가 반영되는 것이다.

 

플러시 기준이 어떻게되는지 살펴보자.

대상 옵션 설명
LRU 리스트 innodb_lru_scan_depth - LRU 리스트를 스캔할 떄 한번에 몇개의 데이터 페이지를 검사할지 결정
- 값이 너무 크면 한번에 많은 페이지를 검사하여 불필요한 페이지를 삭제하는데 효율적일 수 있으나 CPU부하가 크고, 값이 너무 작으면 불필요한 페이지 삭제 처리 속도가 늦어질 수 있다.(잦은 작업을 유발할 수 있음)
LRU 리스트,
플러시 리스트
innodb_page_cleaners - LRU 리스트와 플러시 리스트를 관리하는 쓰레드 개수
- 디폴트값은 4
- CPU 코어가 많다면 코어 수에 맞춰 높은 동시 처리 가능
   -> 잦은 작업이 아닌 한번의 작업을 일괄적으로 빠르게 처리 가능
플러시 리스트 innodb_max_dirty_pages_pct - 더티 페이지 비율이 일정 수준(%) 이상이면 적극적으로 플러시
- 기본값 90%

 

 

반응형