1. InnoDB
- MySQL의 Storage Engine 중 하나로, 트랜잭션 지원과 높은 안정성으로 주로 사용되는 엔진 중 하나이다.
- 대용량의 데이터를 다루고, 다른 여러가지 기능을 제공해준다.
2. Architecture
2-1. In-Memory Structures
1) Buffer Pool
- 버퍼풀은 테이블 및 인덱스 데이터를 캐싱하는 메인 메모리 영역이다.
- 쓰기 버퍼링 기능을 제공한다. 즉, 쿼리가 실행됐지만 아직 commit되지 않은 데이터들은 Buffer pool에서 들고 있게 된다는 것이다.
- 쿼리가 실행됐는데, 해당하는 데이터들이 Buffer Pool에 없다면, 디스크에서 읽기/쓰기해서 가져오게 된다.
2) Change Buffer
- 보조 인덱스 (Secondary Index)의 변화를 캐싱하는 메모리 영역이다. 쉽게 이야기하면, 어떤 데이터의 인덱싱된 외래키가 새롭게 생기거나 수정되거나 삭제되면 Change Buffer에 그 변화를 캐싱한다는 것이다.
- 보조 인덱스와 관련된 데이터가 버퍼풀에 없는 상태에서 보조 인덱스에 변화가 생겼을 때, 이 변화를 캐싱한다.
3) Adaptive Hash Index
- 자주 사용되는 컬럼을 해시로 정의해서 PK기반으로 생성된 Tree를 매번 스캔하지 않고도 데이터를 탐색할 수 있게 해주는 기능이다.
자주 사용되는 컬럼에 대해서만 해시를 생성하므로, 성능 향상에 도움이 된다.
4) Log Buffer
- MySQL서버에서 실행된 트랜잭션은 Redo Log에 기록이 되는데, 매번 기록하는 것은 성능상 문제가 될 수 있으므로 Log Buffer에 기록해뒀다가 한꺼번에 Redo Log에 기록을 한다.
2-2. On-Disk Structures
1) Tables
- 우리가 아는 DB의 테이블들을 이야기한다.
- 테이블 정보는 .frm파일에 저장해서 관리한다.
2) Indexes
- 인덱스의 종류에는 '클러스터 인덱스'와 '보조 인덱스(Secondary Index)'가 있다.
- 클러스터 인덱스는 PK와 같은 의미의 용어이다.
- 보조 인덱스는 '인덱스키와 PK의 조합'이다.
- 보조 인덱스에서 PK를 찾고, 그 PK를 통해서 원하는 데이터를 찾는 식으로 데이터 탐색이 이루어진다.
3) Tablespaces
- 테이블스페이스는 시스템 테이블스페이스, File-per-table 테이블스페이스, 임시 테이블스페이스 등등이 있다.
- 시스템 테이블스페이스 : 시스템 전체에 대한 정보가 저장되는 파일이다. 데이터 Dictionary, Undo Log와 같은 것들을 저장한다.
- File-per-table 테이블스페이스 : 이름에서도 유추할 수 있듯이 DB에 생성되어 있는 테이블 각각의 정보를 기록하는 파일이다. 데이터와 인덱스 정보가 기록이 되고, .idb확장자를 갖는다.
4) Doublewrite Buffer
- 버퍼풀에서 데이터가 Flush되어 디스크에 저장될 때, 이중 쓰기 버퍼에도 데이터가 같이 기록이 된다.
- 데이터의 복사본이라고 생각할 수 있고, 이는 예상치 못한 장애가 생겼을 때 안전하게 데이터를 복구하기 위함이다.
5) Redo Log
- 트랜잭션의 내용을 기록하는 파일이다.
- MySQL서버에 장애가 생겨서 메모리에 저장됐던 정보들이 모두 사라지면, Redo Log를 참고하여 장애 이전 시점으로 복구한다.
6) Undo Logs
- 어떤 트랜잭션이 수행되기 이전의 데이터를 기록하는 파일이다.
- 트랜잭션을 수행하고 해당 트랜잭션을 취소하는 상황처럼 트랜잭션이 수행되기 이전의 데이터가 필요한 경우를 위해서 존재한다.
** 참고 자료 : https://velog.io/@juhyeon1114/MySQL-Storage-Engine-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-InnoDB
'DB' 카테고리의 다른 글
구조적 질의어 (SQL, Structured Query Language) ( 2 ) (0) | 2024.11.06 |
---|---|
구조적 질의어 (SQL, Structured Query Language) ( 1 ) (1) | 2024.11.05 |
MySQL Server (0) | 2024.11.01 |
RDBMS (Relationa DataBase Management System) (0) | 2024.11.01 |
데이터 베이스 키(key) (1) | 2024.11.01 |