DB & AWS Knowledge
MySQL / MariaDB 기본 아키텍처 (Data - InnoDB) 본문
해당 페이지에서는 MySQL / MariaDB 기본 아키텍처 중 InnoDB data 영역에 대하여 다룬다.
참고자료 및 사진출처
dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html
minsql.com/mysql/mysql-innodb-architecture-change-buffer/
lalitvc.wordpress.com/2017/08/28/mysql-5-7-innodb-tablespace/
엔진영역에서 설명 했듯, MySQL / MariaDB 는 타 RDBMS 와는 다르게 데이터 영역에 대한 아키텍처가 DB 에서 사용하는 데이터 엔진에 따라 다르다. 그래서 이 페이지에서는 다양한 데이터 엔진 중 가장 많이 사용하는 InnoDB 엔진을 기준으로 Data 영역의 아키텍처를 다루겠다.
MySQL 5.7 기준, InnoDB 의 기본 데이터엔진 구조는 아래와 같다.
MySQL 8.0 기준, InnoDB 의 기본 데이터엔진 구조는 아래와 같다.
실제 데이터 영역은 오른쪽 구조로 저장이 된다. 오른쪽영역에 있는 구성요소들은 아래와 같다.
System Tablespace (ibdata1)
메모리 영역에서 디스크에 써내려지는 데이터들에 대해서 각 테이블 영역별 테이블스페이스에 쓰이기 전에 다목적으로 임시 보관을 하는 장소다. 위와 같이 4개의 요소들로 크게 구성되는데 4개의 요소들은 아래와 같이 각각의 기능을 수행한다.
- InnoDB Data Dictionary
DB 내의 메타데이터를 저장하는 공간이다.
- Double write buffer
메모리 버퍼 캐시 공간에서 실제 데이터를 보관하는 테이블 데이터 파일에 데이터를 써내리기 전, 해당 데이터들을 보관하는 장소다. DB Crash 가 났을 때, 복구를 위해서 써내려지던 데이터를 복구 수단으로 가져 올 수 있는 공간이기도 하다.
- Change Buffer
PK 이외에 부가 인덱스 (Secondary Index) 의 레코드 값들을 보관하는 장소다. 부가 인덱스에 있는 값들이 지속적으로 바뀔 시, 이에 대한 인덱스 정보 또한 지속적으로 바꾸기 위해 디스크 접근 빈도가 높아지면 이에 대한 DISK I/O 가 높아지므로 이에 대한 개선 방안으로 마련된 공간이다. 이 공간에 데이터가 보관되기 위해서는 두가지 조건이 충족되어야 한다.
1. Non Unique Index 의 데이터 일 것
2. 메모리 버퍼풀에 해당 데이터가 존재 하지 않을 것
- Undo Logs
Undo Segment 라고도 하며 (공식 Document 에서는 undo log segment 라고 통합하여 지칭한다.)
이에 대한 집합을 Rollback Segments 라고 한다.
Oracle 의 undo segment 와 대응 된다.
(Oracle 과 MySQL InnoDB 의 MVCC 기본 사상이 같아서 사용하는 개념도 유사함)
데이터 변경내역에 대해서 순차적으로 보관하는 공간이며, 각 Log 들은 Rollback 시 이에 대한 Rollback 시점 및 데이터 까지 추척 할 수 있도록 되어있다. 기본적으로는 system tablespace 에 구성되었으나 MySQL 5.6 이상부터는 이에 대한 데이터 변경내역이 많아지면 이에 따른 Undo Log -> System Tablespace 가 단일 파일로 매우 커지게 되므로 이에 대한 대안으로 Undo Log 들의 집합인 Undo Tablespace 를 따로 보관 할 수 있게 옵션을 지정 할 수 있다.
(Undo Tablespace 를 활성화 하면 System Tablespace 내 Undo Log 는 비 활성화 된다.)
Temporary Tablespace
5.7.2 이상부터 도입된 공간이며, 이름과 같이 임시 테이블에서 Uncommit 된 데이터들을 보관하는 공간이다.
(보관대상이 다를고 역할은 같은 Undo Tablespace 와 유사하다.)
General Tablespace
MySQL 5.7.6 에서 도입된 개념이며, Oracle 과 유사하게 일반 데이터들을 보관 할 수 있는 추가 테이블스페이스다.
Create 문으로 생성이 가능하다. 데이터 파일에 대한 테이블스페이스 파일을 분할하면 Disk 접근을 분산 시킬 수 있는 이점이 있다.
File-Per-Table Tablespaces
MySQL / MariaDB 내의 실질적인 데이터들을 보관하는 공간이다. 이름을 보고 추측을 할 수 있듯이 MySQL / MariaDB 는 기본적으로 테이블 단위로 파일을 만들어 그 테이블내의 데이터들을 해당 파일들에 보관한다.
보통 각 테이블당 . frm 파일 과 .ibd 파일 2개로 구성이 되는데 frm 파일은 테이블의 형상정보를 가지고 있는 파일로써 어떤 스토리지엔진을 사용하든지 무조건 생성되는 파일이며, ibd 파일은 그 테이블 내의 데이터들을 보관하는 파일이다.
Redo Log
Oracle 의 Redo Log 와 동일한 기능을 하는 요소. Oracle 과 동일하게 버퍼 크기, 파일 개수, 파일 크기를 조절 할 수 있는 파라미터가 있다.
'MySQL > 아키텍처 및 내부 구조' 카테고리의 다른 글
MySQL undo log 의 특징 (0) | 2023.09.01 |
---|---|
Temporary table 및 Temporary tablespace 개념 및 관리 (0) | 2022.06.02 |
MySQL / MariaDB 기본 아키텍처 (쿼리 실행 과정) (0) | 2021.03.16 |
MySQL / MariaDB 기본 아키텍처 (Engine) (0) | 2021.03.12 |
MySQL / MariaDB (InnoDB 기준) index 종류 (0) | 2021.03.10 |