MySQL/MariaDB InnoDB Storage Engine (Data Page)
· Version : MySQL 5.5, 5.6, 5.7
MySQL / MariaDB 에서 사용하는 InnoDB 스토리지 엔진은 레코드 기반의 잠금을 제공하기 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. InnoDB의 구조는 크게 메모리 영역과 CPU 연산 영역, 디스크 스토리지 영역으로 구분할 수 있다. 메모리 영역에는 버퍼풀과 로그 버퍼가 있으며 CPU 연산에는 인서트 버퍼 머지 스레드, Write 스레드, 로그 스레드, 그외 기타 스레드가 있다. 디스크 영역에는 시스템 테이블 스페이스와 사용자 테이블 스페이스, 리두로그가 존재한다.
· MySQL/MariaDB InnoDB 스토리지 엔진 특성 : http://sqlmvp.kr/220432956246
이번 포스트에서는 InnoDB의 데이터 Page size와 Bufer pool에서 페이지가 디스크로 플러쉬 되는 내용에 대해서 알아본다.
Page는 디스크(데이터 파일)와 메모리(버퍼풀) 사이에서 InnoDB가 한번에 전송할 수 있는 양을 나타내는 단위로Page에는 데이터 양에 따라 최소한 하나 이상의 행이 존재한다. 행이 완전히 단일페이지에 저장되지 않을때에는 다른 페이지에 데이터를 저장하고 해당 페이지에 포인터로 저장 위치를 표시 한다. 데이터를 읽고 쓰는 경우 I/O 처리량을 높이기 위해 한번에 한 익스텐트식 읽는다.
한 Page 더 많은 데이터를 저장하기 위해서는 압축된 페이지 형식을 사용하며 , BLOB, large text 필드 형태의 데이터를 별도의 분리된 테이블에 저장하여 데이터 조회시 해당 열을 참조하지 않는 경우 I/O 오버헤드 및 메모리 사용을 줄일 수 있다.
Page Size는 MySQL 5.5까지는 InnoDB에서 16KB로 고정되어 있다. MySQL 5.6 부터는 innodb_page_size 설정 옵션에 따라 제어되며 4KB, 8KB, 16KB가 지원된다. MySQL 5.7 이후부터는 32KB 및 64KB 페이지 크기를 지원한다. 32KB 및 64KB 페이지 크기의 경우 FOW_FORMAT= COMPRESSED는 지원되지 않으며 최대 레코드 크기는 16KB 이다.
show Variables where Variable_name like 'innodb_p%'; |
페이지 크기는 MySQL 인스턴스를 생성 할 때 설정되며 이후에는 일정하게 유지된다. 페이지 크기는 시스템 테이블 스페이스, 테이블 당 파일 테이블 스페이스 및 일반 테이블 스페이스를 포함하여 모든 InnoDB 테이블 스페이스에 동일하게 적용된다.
Page cleaner는 버퍼풀에서 더티페이지를 플러시할때 MySQL 5.6 이전 버전에서는 master thread에 의해서 작업이 수행되었다. 페이지 클리너 스레드의 수는 MySQL 5.7부터 innodb_page_cleaners 구성 옵션에 의해 제어 된다.
[참고자료]
· http://sqlmvp.kr/220432956246
· https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_page
· https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_page_cleaners
2017-10-16 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com
MySQL, MariaDB, InnoDB, InnoDB Storage Engine, Mysql Page size, innodb extent, 스토리지 엔진, 버퍼풀, 이노DB,
'MySQL, MariaDB' 카테고리의 다른 글
MySQL/MariaDB Cluster Index (0) | 2019.03.24 |
---|---|
MySQL/MariaDB 테이블의 Row count 구하기 (0) | 2019.03.24 |
MySQL/MariaDB 데이터를 CSV로 내보내기 (0) | 2019.03.24 |
MySQL/MariaDB Table Update Safe 모드 (0) | 2019.03.24 |
MySQL/MariaDB max_connection 개수와 성능 (0) | 2019.03.24 |