Buffer Pool
1. Buffer Pool이란 무엇일까?
disk에서 읽은 page를 메모리에 캐싱해 두는 공간이다.
데이터 변경 작업을 메모리 상에서 먼저 수행하고
dirty page를 일괄적으로 disk에 flush 함으로써 I/O를 줄여준다.
2. Buffer Pool은 어떤 방식으로 데이터를 관리할까?
page를 관리하기 위해 LRU List , Flush List , Free List를 사용한다.
LRU List를 사용해서 자주 참조되는 page는 앞쪽으로 배치하고
덜 참조되는 page는 뒤쪽으로 배치하고 공간이 부족하면 뒤쪽에서부터 evict한다.
Flush List를 사용해서 dirty page를 순차적으로 disk에 동기화한다.
Free List는 재사용되는 page들을 모아놓은 리스트로
LRU List에서 evict된 page들은 Free List로 이동된다.
3. Buffer Pool과 관련된 변수는 어떤 게 있을까?
innodb_buffer_pool_size
- buffer pool 크기 지정
innodb_lru_scan_depth
- LRU List 끝부분부터 설정된 갯수만큼 dirty page를 disk로 동기화한다.
innodb_adaptive_flushing
- 활성화하면 알고리즘에 따라 적정 dirty page가 buffer pool에 유지되도록 disk 쓰기작업을 한다.
innodb_buffer_pool_dump_now
- 활성화하면 buffer pool을 백업할 수 있다.
innodb_buffer_pool_load_now
- 활성화하면 buffer pool을 복구할 수 있다.
Redo Log
1. Redo Log란 무엇일까?
redo log는 데이터 변경 작업을 복구할 수 있도록 기록해 두는 로그이다.
데이터를 먼저 메모리에 반영하고 나중에 디스크에 반영하기 때문에
중간에 서버가 비정상 종료되면 데이터가 유실될 수 있다.
이런 이유로 redo log를 기록해 두고 이를 사용해서 데이터를 복구한다.
2. Redo Log는 어떤 방식으로 기록될까?
redo log를 기록하는 과정은 아래와 같다.
1. 데이터 변경사항은 buffer pool이라는 메모리 공간에 반영하고
redo log는 log buffer라는 메모리 공간에 반영한다.
2. transaction이 commit이 되면 log buffer의 내용이 disk로 동기화된다.
3. flush 정책에 따라 buffer pool의 내용이 disk로 동기화된다.
redo log file은 순환 구조로 동작한다.
고정된 수의 file을 사용하고 마지막 파일까지 사용하면
처음 파일로 돌아와서 다시 쓰는 순환 구조이다.
LSN은 redo log가 순차적으로 기록되는 위치이다.
마지막 checkpoint 지점의 LSN보다 이전의 log는 복구 과정에서
필요 없으므로 순환 구조를 통해 해당 영역을 재사용한다.
3. Redo Log 관련 변수는 어떤 게 있을까?
innodb_log_files_in_group
- redo log 파일 갯수 지정
innodb_log_file_size
- redo log 파일 크기 지정
Undo Log
1. Undo Log란 무엇일까?
transaction 도중 변경되기 전의 데이터를 기록해 두는 로그이다.
undo log를 사용하는 이유는 2가지가 있다.
첫 번째로 transaction이 실패하면 rollback 할 때 undo log를 사용해서 데이터를 복원한다.
두 번째로 변경되고 있는 데이터를 다른 transaction에서 읽을 때
isolation level이 READ_COMMITTED 이상이면
undo log를 사용해서 변경 이전의 데이터를 반환한다.
2. Undo Log는 어떤 방식으로 기록될까?
undo log는 buffer pool이라는 메모리에 공간에 반영되고
flush 정책에 따라 disk로 동기화된다.
undo log file은 undo tablespace에 존재하는
여러 개 중 하나의 rollback segement 안에서
비어있는 undo slot을 할당받아 기록된다.
commit이 완료되고 참조되지 않는 undo log는
purge thread에 의해서 삭제되고 재사용된다.
3. Undo Log 관련 변수는 어떤 게 있을까?
innodb_undo_log_truncate
- 활성화하면 undo log file에서 사용되지 않는 공간을 잘라내고 운영체제로 반납한다.
innodb_undo_tablespaces
- undo log file 갯수 지정
innodb_rollback_segments
- rollback segments 갯수 지정
Adaptive Hash Index
1. Adaptive Hash Index란 무엇일까?
자주 사용되는 인덱스를 내부적으로 감지해서 해시 테이블로 캐싱하는 것을 말한다.
B-Tree 탐색시간은 O(logn)인데 이를 사용해서 O(1)로 줄일 수 있다.
index 키 값과 data page 주소의 쌍으로 데이터를 관리한다.
2. Adaptive Hash Index 관련 변수는 어떤 게 있을까?
innodb_adaptive_hash_index
- adaptive hash index 활성화 여부
'분석 > 데이터베이스' 카테고리의 다른 글
| [MongoDB] 복제에 관해서 알아보자 (0) | 2025.09.22 |
|---|---|
| [MySQL] Performance Schema와 Sys Schema (1) | 2025.08.31 |
| [MongoDB] Sharding에 대해 알아보자 (0) | 2025.08.17 |
| [MongoDB] WiredTiger Storage Engine에 대해 알아보자 (1) | 2025.08.04 |
| [MySQL] Optimizer의 최적화 방식에 대해 알아보자 (0) | 2025.07.01 |