INSERT하면 데이터는 디스크에 어떤 구조로 저장되는걸까?

InnoDB 저장 구조의 4계층

결론부터 말하면 페이지 → 익스텐드 → 세그먼트 → 테이블스페이스 순서의 계층구조로 이루어져있음.

가장 최소 단위는 페이지이다. 이걸 책에 비유하면, 익스텐드는 페이지 64쪽 모음. 세그먼트는 책의 한 챕터, 그리고 책 한권이 테이블 스페이스가 됨.

페이지 (Page)

InnoDB의 최소 I/O단위임. 페이지 기본 크기는 16kb이다.

SELECT @@innodb_page_size / 1024 AS page_size_kb;

image.png

다시 강조해도 부족하지 않은건, InnoDB의 모든 I/O는 페이지 단위로 이뤄지고, 페이지는 기본값이 16kb라는 것이다.

이게 무슨말이냐면 한 행만 읽더라도 그 행이 들어있는 16kb 페이지 전체를 디스크에서 읽어야 한다는 의미. 애초에 디스크는 특정 바이트 하나만 읽는게 불가하다. 디스크도 블록이라는 최소 읽기 단위가 있기 때문. InnoDB는 이걸 16kb의 페이지로 관리한다. OS/SSD의 기본 블록단위도 4kb라, 16kb이 정수배라 좋음. 그래서 일반적인 OLTP 워크로드에서는 16kb를 균형점으로 자주 사용한다.

❗ 그리고 이 기본값 16kb는 실무에서도 웬만해서는 변경하지 않는다!

심지어 한번 초기화된 서버는 값을 변경할 수 없음. mysql 인스턴스 처음 초기화할때만 설정가능함.

페이지가 앞으로 다룰 내용의 기초가 된다.

익스텐트 (Extent)