콘텐츠로 이동

12-11-Real-MySQL

Real MySQL 8.0 1 - 아키텍처


데이터 페이지

MySQL이 데이터를 저장하는 단위(기본 16KB)

방식 설명
한 줄씩 읽기 디스크 왔다갔다 많음, 느림
페이지 단위로 읽기 한 번에 뭉텅이로, 빠름
디스크 → 데이터 페이지 단위로 저장
버퍼풀 → 데이터 페이지를 메모리에 올림
수정하면 → 더티 페이지 됨

세마포어

동시에 몇 명까지 들어갈 수 있는지 정하는 카운터

세마포어 = 3 (남은 자리)

A 입장 → 세마포어 = 2
B 입장 → 세마포어 = 1
C 입장 → 세마포어 = 0
D 입장 시도 → 대기! (0이라서)

A 퇴장 → 세마포어 = 1
D 입장 → 세마포어 = 0

MySQL에서 여러 스레드가 자원을 접근할 때 조절하는 방법

개념 설명 예시
뮤텍스 1개만 접근 가능 (0 또는 1) 한 스레드만 접근해야 할 때(동기)
세마포어 N개까지 접근 가능 (카운터) 여러 스레드가 제한적으로 접근할 때
  • 예: 버퍼풀 수정할 때 여러 스레드가 동시에 건드리면 데이터 꼬임 → 뮤텍스로 보호

InnoDB vs MyISAM

InnoDB MyISAM
트랜잭션 O X
외래키 O X
락 단위 행(Row) 테이블
복구 크래시 복구 가능 불안정
현재 기본 엔진 레거시
  • InnoDB: 행 단위 락 -> 동시성 좋음
  • MyISAM: 테이블 락 -> 1개씩 순서대로