Data/MySQL (5) 썸네일형 리스트형 [MySQL] B-Tree 인덱스 완전 해부 — 구조부터 가용성까지 앞선 편들에서 B-Tree 스토리지 엔진의 원리를 살펴보았습니다. 이번 편에서는 시야를 좁혀 MySQL이 실제로 B-Tree 인덱스를 어떻게 구성하고 활용하는지를 다룹니다. 이론적인 자료구조를 넘어, 인덱스가 추가·삭제될 때 내부에서 무슨 일이 일어나는지, 어떤 조건에서 인덱스가 실제로 효과를 발휘하는지를 구체적으로 살펴보겠습니다. 1. B-Tree 인덱스의 구조 및 특성InnoDB의 클러스터형 인덱스MySQL InnoDB 스토리지 엔진은 테이블 데이터 자체를 클러스터형 인덱스(Clustered Index) 형태로 저장합니다. 즉, 테이블은 별도의 힙 파일(heap file)이 아니라 B-Tree 자체가 곧 테이블입니다.클러스터형 인덱스의 리프 노드에는 실제 행 데이터 전체가 담겨 있습니다. 기본 키(P.. [MySQL] 트랜잭션과 잠금 2편 — 격리 수준과 MVCC 앞선 포스트에서 MySQL의 락 메커니즘을 살펴봤습니다. 락은 쓰기 충돌을 막는 수단이지만, 동시에 실행 중인 트랜잭션들이 서로의 변경 내용을 얼마나 볼 수 있는지는 별도의 개념인 격리 수준(Isolation Level)으로 제어합니다. 이번 포스트에서는 트랜잭션 격리 수준 4가지와, InnoDB가 이를 구현하는 핵심 메커니즘인 MVCC를 살펴봅니다. 1. 이상 현상 (Anomaly)격리 수준은 동시성과 일관성 사이의 트레이드오프입니다. 격리를 느슨하게 할수록 동시성은 높아지지만, 다음과 같은 이상 현상이 발생할 수 있습니다. 더티 리드 (Dirty Read)아직 커밋되지 않은 다른 트랜잭션의 변경 내용을 읽는 현상입니다.트랜잭션 A: salary를 5000 → 8000으로 UPDATE (미커밋)트랜잭션.. [MySQL] 트랜잭션과 잠금 1편 — 락 메커니즘 트랜잭션이 안전하게 동작하려면 동시에 실행되는 다른 트랜잭션으로부터 데이터를 보호하는 장치가 필요합니다. MySQL은 이를 두 계층으로 구현합니다.MySQL 엔진 락: MySQL 서버 계층에서 제공하는 락. 스토리지 엔진과 무관하게 동작합니다.InnoDB 스토리지 엔진 락: InnoDB 내부에서 행(row) 단위로 동작하는 락입니다.이번 포스트에서는 두 계층의 락 구조와, 락 경합이 발생했을 때 어떤 일이 생기는지를 살펴봅니다. 1. MySQL 엔진 락 (서버 레벨)MySQL 엔진 락은 InnoDB가 기본 엔진이 된 이후로는 실무에서 직접 마주칠 일이 많지 않습니다. 그러나 MySQL 락 체계의 전체 그림을 이해하는 데 필요한 배경 지식입니다. 글로벌 락 (Global Lock)MySQL 서버 전체에 걸.. [MySQL] 아키텍처 2편 — InnoDB 스토리지 엔진 1편에서 MySQL 서버 계층이 쿼리를 어떻게 파싱하고 실행 계획을 수립하는지 살펴봤습니다. 이번 글에서는 그 아래, 실제로 데이터를 저장하고 관리하는 InnoDB 스토리지 엔진의 내부 구조를 살펴봅니다. InnoDB를 이해하는 핵심은 한 가지 질문으로 요약됩니다. "디스크 I/O를 어떻게 줄이면서, 동시에 데이터 안전성과 동시성을 어떻게 보장하는가?" 아래에서 살펴볼 모든 컴포넌트는 이 세 가지 목표 중 하나, 혹은 그 이상을 위해 존재합니다. 1. 버퍼 풀 (Buffer Pool)목적: 디스크 I/O 최소화 InnoDB의 가장 핵심적인 메모리 구조입니다. 디스크에서 읽은 데이터 페이지와 인덱스 페이지를 메모리에 캐싱해, 동일한 데이터를 다시 읽을 때 디스크 I/O 없이 메모리에서 바로 반환합니다. 쓰.. [MySQL] 아키텍처 1편 — 엔진 아키텍처 MySQL을 매일 사용하면서도, 쿼리를 실행하면 내부에서 정확히 무슨 일이 벌어지는지 설명하기는 쉽지 않습니다. 파서가 뭘 하고, 옵티마이저가 뭘 결정하며, 스토리지 엔진은 왜 교체 가능한 구조인지 — 이 글에서는 클라이언트가 SQL을 보내는 순간부터 결과가 돌아오기까지의 흐름을 단계별로 살펴봅니다. 1. 전체 구조 — 두 계층의 분리MySQL의 아키텍처는 크게 두 계층으로 나뉩니다.MySQL 서버 계층 (Server Layer): 쿼리 파싱, 최적화, 실행 계획 수립 등 데이터베이스의 핵심 로직을 담당합니다.스토리지 엔진 계층 (Storage Engine Layer): 실제 데이터를 디스크에 읽고 쓰는 역할을 담당합니다.이 두 계층은 명확하게 분리되어 있으며, 스토리지 엔진은 플러그인 방식으로 교체할 .. 이전 1 다음