loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

[InnoDB Engine] 페이지란?
📈 Database

[InnoDB Engine] 페이지란?

2024. 9. 12. 16:43
반응형

페이지란?

DB에서 행(Row)을 저장할 때 실제 물리적으로 디스크에 담기는 단위는 '페이지'로 관리됩니다.

하나의 페이지에는 여러개의 행이 담긴다고 볼 수 있습니다.

페이지의 목적

효율적인 데이터 관리와 성능을 위해 데이터베이스 시스템에서 자주 사용됩니다.

페이지 단위로 데이터 접근을 최적화하면, 데이터 조회와 수정 시 성능을 향상시킬 수 있습니다.

페이지 크기는 디스크 I/O를 줄이고, 캐시 메모리 사용을 최적화하는 데 도움이 됩니다.

페이지는 메모리 내에서 효율적으로 데이터를 캐싱하고, 페이지를 통해 데이터 접근을 관리합니다.

페이지의 특징

InnoDB에서는 데이터와 인덱스가 디스크에 저장될 때 페이지라는 블록 단위로 나뉩니다.

각 페이지는 고정된 크기를 가지며, 일반적으로 4KB, 8KB, 16KB, 또는 32KB로 설정할 수 있습니다.

페이지 크기 확인

SHOW VARIABLES LIKE 'innodb_page_size';

16KB

페이지 저장 방식의 종류

redundant

이노 디비 초기 사용 방식

구조: 데이터 페이지 내에 데이터의 모든 필드가 저장됩니다. 페이지가 꽉 차면, 페이지의 끝에 있는 필드 값은 오프페이지에 저장됩니다.

데이터를 페이지 내에 직접 저장한다.

compact

768 바이트만 데이터를 저장하고 나머지 데이터는 Off-Page에 저장하며 해당 데이터에 대한 포인터는 페이지에 저장합니다.

Off-Page는 아래에서 다시 설명합니다.

dynamic

페이지 크기보다 작으면 데이터를 페이지 안에 저장하고 페이지 크기 보다 크면 Off-Page에 데이터를 추가적으로 저장합니다. 

페이지 저장 방식 확인

SELECT TABLE_NAME, ROW_FORMAT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydatabase';

 

테이블의 페이지 저장 방식을 확인할 수 있습니다.

Overflow page(Off-Page)

페이지 하나에 4KB라고 했을 때 가변 길이 열이 페이지 크기를 초과하면 페이지의 크기와 구조를 효율적으로 사용하기 위해 데이터의 일부만 페이지에 저장하고, 나머지 데이터를 별도의 Off-Page에 저장합니다.

이렇게 하면 페이지의 내부 공간을 절약할 수 있습니다.

 

데이터 전체를 페이지에 저장하면 되는데 왜 Off-Page가 존재할까?

페이지 간에 데이터를 연속적으로 저장하는 것은 페이지의 목적에 맞지 않습니다.

위에서 서술한 페이지의 목적을 보면 데이터를 잘 찾기 위한 기능을 위해서 존재하는 것이지 데이터를 저장하는 목적은 아닌 것을 알 수 있습니다.

Off-page에 저장되는 것은 페이지의 효율적인 사용을 위함이고 Off-page에 저장된 데이터를 실제 조회하면 속도가 저하됩니다.

데이터가 페이지 내에 저장되는 것이 검색 성능에 더 유리하며, 페이지 캐시의 효율성을 높입니다.

페이지 상태 확인

SHOW ENGINE INNODB STATUS;

위의 명령어를 이용하면 현재 할당된 페이지의 수, 수정된 페이지, 더러운 페이지(Dirty Page)의 비율을 확인할 수 있습니다.

Dirty Page란 데이터베이스의 버퍼 풀에서 수정되었지만 아직 디스크에 기록되지 않은 페이지를 의미합니다

이 비율이 높다면 데이터베이스가 더 자주 디스크에 데이터를 플러시해야 한다는 것을 의미할 수 있습니다.

생각해볼 수 있는 것

만약에 페이지 크기가 16kb라면 8192개의 글자를 저장할 수 있습니다.

하지만 이보다 크기를 넘어버리면 Off-Page에 넘어가버리므로 속도 저하는 피해갈 수 없습니다.

예를 들어 Json을 통째로 문자열로 치환해 컬럼에 저장한다면 데이터베이스 속도저하의 가능성이 높아지겠습니다.

 

728x90

'📈 Database' 카테고리의 다른 글

[ElasticSearch] 조회 방식 비교(쓰는 중)  (0) 2025.03.29
[DB] Json을 RDBMS(MySQL, PostgreSQL)에 저장해도 좋을까?  (1) 2024.10.02
MaxScale 지식  (0) 2024.07.19
[Mysql] No space left on Issue 해결  (0) 2024.06.10
ElasticSearch 8 Windows 설치  (0) 2024.02.22
    '📈 Database' 카테고리의 다른 글
    • [ElasticSearch] 조회 방식 비교(쓰는 중)
    • [DB] Json을 RDBMS(MySQL, PostgreSQL)에 저장해도 좋을까?
    • MaxScale 지식
    • [Mysql] No space left on Issue 해결
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바