Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

MySQL / MariaDB 기본 아키텍처 (Data - InnoDB) 본문

MySQL/아키텍처 및 내부 구조

MySQL / MariaDB 기본 아키텍처 (Data - InnoDB)

`O` 2021. 3. 30. 02:58
728x90
반응형

해당 페이지에서는 MySQL / MariaDB 기본 아키텍처 중 InnoDB data 영역에 대하여 다룬다.

참고자료 및 사진출처

dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html

myinfrabox.tistory.com/49

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 5.7 공식 Doc



MySQL 8.0 기준, InnoDB 의 기본 데이터엔진 구조는 아래와 같다.

 

출처 : MySQL 8.0 공식 Doc

 

실제 데이터 영역은 오른쪽 구조로 저장이 된다. 오른쪽영역에 있는 구성요소들은 아래와 같다.

 

 

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 과 동일하게 버퍼 크기, 파일 개수, 파일 크기를 조절 할 수 있는 파라미터가 있다.

반응형
Comments