-
MySQL Page 알아보기Database 2023. 10. 30. 10:05728x90반응형
- 목차
함께 읽으면 좋은 글
https://westlife0615.tistory.com/8
https://westlife0615.tistory.com/17
소개.
MySQL 의 데이터들은 다음과 같은 종류들이 있습니다.
1. Table 의 Row
2. Index
3. Undo Log
등이 존재합니다.
Row 들은 MySQL 에서 관리하는 실질적인 데이터이구요.
Index 는 Row 의 효율적인 조회를 위해서 사용됩니다.
Undo Log 는 Transaction 처리를 위해서 사용되는 데이터이구요.
이러한 데이터들은 On-disk 영역의 저장소에서 파일로 관리됩니다.
이를 Tablespace 라고 부르는데요.
Row, Index, Undo Log 들은 각각의 Tablespace 에 저장되게 됩니다.
Page 란 이러한 데이터들의 묶음입니다.
Page 는 Block of Data 라고 표현되죠.
Page 는 Tablespace 라는 큰 규모의 파일 내부에서 논리적인 데이터 묶음이며,
MySQL 에서 Disk I/O 시에 한번에 요청하는 데이터 단위이기도 합니다.
즉, 하나의 Row 를 찾더라도 이 Row 가 속하는 Data Page 하나를 통으로 메모리에 로드하게 되죠.
이번 글에서는 MySQL 에서 다루는 데이터 묶음의 단위인 Page 에 대해서 알아보도록 하겠습니다.
Page 종류.
Page 의 종류로는 Data Page, Index Page, Undo Log Page 가 있습니다.
이는 MySQL 에서 중요시하는 데이터 타입인 Row of Table, Index, Undo Log 의 묶음 단위를 뜻합니다.
Data Page.
Data Page 는 실질적인 테이블 데이터들이 저장합니다.
아래와 같은 테이블이 존재하는 경우, row{id : 1, name : 'Andy'}, row{id : 2, name : 'Bob'} 과 같은 Row 들이 저장되는 영역입니다.create table test_user_table( id int not null auto_increment primary key, name varchar(24) )
Index Page.
Index Page 는 테이블의 Index 정보를 저장합니다.
아래와 같은 테이블은 2 개의 Index 를 가집니다.
id 칼럼을 사용하는 Primary Index 와
city 칼럼을 사용하는 Secondary Index 가 있죠.create table test_user_table( id int not null auto_increment primary key, name varchar(24), city varchar(24), key city_index(city) )
Index Page 는 Index 값과 이에 상응하는 Data Page 의 주소를 함께 가집니다.
Primary Index Page 의 경우에는 Index 에 대응되는 하나의 Data Page 주소를 가지고,
Secondary Index Page 의 경우에는 Index 범위에 대응되는 여러 Data Page 주소를 가집니다.
예를 들어,
row{id : 1, name : 'Andy', city : 'Seoul'}, row{id : 2, name : 'Bob', city: 'Busan'} 이 1번 Page 에 저장되어 있다면,
Primary Index Page 는
index{id : 1, page : 1}, index {id : 2, page 1} 와 같은 형식으로 1번 Page 를 가리킵니다.
Secondary Index Page 는
index{id : 'Seoul', page : 1}, index {id : 'Busan', page 1} 와 같은 형식으로 1번 Page 를 가리킵니다.
Undo Log Page.
Undo Log Page 는 Undo Log Entry 들을 기록합니다.
Undo Log 는 Transaction Isolation 을 구현하기 위해서 각 Transaction 별로 원본 데이터를 저장하게 됩니다.
특히 REPEATABLE READ Isolation Level 에서 REPEATABLE READ 를 구현하기 위해서 사용됩니다.
Undo Log 에 대한 상세한 설명은 아래 링크를 참조해주세요.
https://westlife0615.tistory.com/8
Transaction 시에 Rollback 상황을 대비하여 원본 데이터들이 Undo Log Page 에 기록됩니다.
MySQL 의 Transaction Management System 은 Transaction Id 와 Transaction 과 관련된 Undo Log Page 들을 기록하고 있으며,
Rollback 시에 해당 정보들을 활용하여 원본 데이터를 복구합니다.
Page 구성.
Page 는 데이터들의 묶음입니다.
이는 논리적인 데이터 단위인데요.
실질적인 그리고 물리적인 단위는 파일로써 관리됩니다.
Row of Table 와 Index 의 경우에는 Tablespace 라는 저장 영역이 있구요.
Undo Log 또한 Undo Tablespace 라는 저장 영역이 존재합니다.
이들은 실질적인 File 이며, 물리적인 단위를 의미합니다.
Page 들은 각 물리적인 영역 내부에서 논리적인 단위로 사용되구요.
B-Tree 형태로 또는 Circular Buffer 형태로써 Page 들은 연결되어 있습니다.
Page Header.
Page 의 최상단에는 Header 영역이 존재합니다.
Header 에는 파일의 타입 (Data Page, Index Page, Undo Log Page) 정보가 저장됩니다.
- PAGE_TYPE_CLUSTERED (Data Page)
- PAGE_TYPE_BTR_INDEX (Index Page)
- PAGE_TYPE_UNDO (Undo Page)
와 같이 고유한 식별값이 존재하구요.
이들은 B-Tree 형태로 또는 Circular Buffer 자료구조의 형태를 유지하여 Referencing 하는 구조를 띕니다.
Page Body.
Page Body 영역에는 실질적인 데이터들이 저장됩니다.
Data Page 의 경우에는 Row of Table 정보들이 저장됩니다.
Index Page 의 경우에는 Index 의 값과 이에 상응하는 Row of Table 의 Page 주소가 저장됩니다.
Undo Log Page 의 경우에는 Transaction 시에 변경되는 데이터들의 원본 데이터가 저장됩니다.
Page Size.
아래 설정값을 통해서 Page 의 기본 크기를 확인할 수 있습니다.
기본값으로 16KB 이 설정되어 있습니다.
즉, Memory <-> Disk 의 IO 시에 전송되는 최소 데이터의 크기가 16KB 가 됩니다.SHOW VARIABLES LIKE 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.03 sec)
반응형'Database' 카테고리의 다른 글
Database Driver 알아보기 (0) 2023.11.04 MySQL Index 알아보기 (0) 2023.10.30 MySQL Buffer Pool 알아보기 (0) 2023.10.30 MySQL Undo Log (Undo Tablespace) 알아보기 (2) 2023.10.30 MySQL Redo Log 알아보기 (2) 2023.10.30