본문 바로가기
데이터베이스

Buffer Pool과 redo의 관계

by 흰색남자 2023. 1. 13.

1. Buffer Pool

먼저 MySQL Buffer Pool 에 대해 알고 있어야한다. Buffer Pool은 Innodb 스토리지 엔진에서 가장 핵심적인 부분을 담당하고 있다. 디스크의 데이터 파일이나 인덱스의 정보를 메모리에 캐싱한다. 또, 쓰기 작업을 지연시켜 일괄 배치 작업으로 처리하여 디스크에 접근하는 i/o를 최적화할 수 있다.

2. Log Buffer

Innodb의 버퍼 풀은 서버의 메모리가 허용하는 만큼 크게 설정하면 많은 양의 데이터를 캐싱할 수 있기 때문에 디스크 접근에 대한 i/o가 발생하지 않아 성능이 좋아진다. 모든 데이터 파일이 Buffer Pool에 적재될 정도의 크기라면 Buffer Pool 크기를 더 늘려도 성능에 도움이 되지 않지만, 그렇지 않은 경우 성능 향상에 도움이 된다.

위에서 설명했듯이 Buffer Pool의 기능은 2가지이다. 데이터의 캐싱, 쓰기 버퍼링을 지원한다.

Buffer Pool의 크기를 단순히 늘리는 것은 캐싱 기능만 향상시키는 것이고 버퍼링 기능가지 향상시키려면 Buffer Pool과 redo의 관계를 알고 있어야 한다.

 

3. buffering

Buffer Pool은 디스크에서 읽은 상태로 전혀 변경되지 않은 클린 페이지와 SQL 쿼리로 인해 변경된 더티 페이지도 가지고 있다. 더티 페이지는 디스크와 데이터가 다르기 때문에 언젠가는 디스크와 동기화 시켜야한다.

redo log는 1개 이상의 고정 크기 파일을 연결해서 순환 고리처럼 사용한다.

데이터 변경이 계속 발생하면 redo log 파일에 기록됐던 로그 엔트리는 어느 순간 다시 새로운 엔트리로 덮어 쓰인다.

그래서 innodb 스토리지 엔진은 전체 redo log 파일에서 재사용 가능한 공간과 재사용 불가능한 공간을 구분해서 관리해야한다.

재사용 불가능한 공간은 active redo log라 부른다. 4.14 사진에서 redo log가 버퍼풀의 page를 가르키고 있다. 가르키고 있는 redo log를 active redo log라 부른다.

redo log 파일의 공간은 순환되어 재사용되는데, 매번 기록될 때마다 로그 포지션이 계속 증가한다.

이를 LSN ( Log Sequence Number )이라고 부른다. InnoDB 스토리지 엔진은 주기적으로 체크포인트 이벤트를 발생시켜 redo log와 buffer의 더티 페이지를 디스크로 동기화한다. 이렇게 발생한 체크포인트중 가장 최근 체크포인트 지점이 lsn이 활성 리두 로그 공간의 시작접이 된다.

 

'데이터베이스' 카테고리의 다른 글

MySQL 힌트  (0) 2023.01.18
my.cnf ( my.ini ) MySQL 최적화와 관련된 변수.  (0) 2023.01.14
MySQL Buffer Pool  (0) 2023.01.13
MySQL redo, WAL  (0) 2023.01.12
hbase와 hbase thrift, happyhbase  (0) 2023.01.04