🫥 Mysql 서버 = MySQL엔진 + 스토리지 엔진
첫번째 층
네트워크 기반 클라이언트 서버 연결 처리, 인증 보안 ( MySQL에 한정적인 것은 아님)
두번째 층
MySQL의 두뇌 쿼리 파싱 분석 등…
세번째 층
스토리지 엔진 저장된 데이터를 검색하고 저장하는 역할 서버는 스토리지 API로 소통하여 엔진 별 차이점을 못느낀다.
parse tree
- SQL의 기본 문법 오류를 체크하며 쿼리를 의미있는 단위의 토큰으로 쪼갠 후 트리 형태 구조로 변경
읽기/쓰기 잠금( 공유잠금, 배타적잠금) : 쓰기 잠금의 경우 클라이언트가 변경하는 동안 다른 클라이언트가 읽지 못하도록 막는다. 그러나 읽기는 여러 클라이언트가 서로 간섭없이 동일한 자원 동시에 읽기 가능
잠금 세분성
트랙잭션 : 작업 단위로 취급 (ACID 원자성, 일관성, 독립성/격리 ,영속성)
격리 수준 : 낮은 격리 수준은 보통 고도의 동시성과 낮은 오버헤드
팬텀 리드
가 생길 수 있음격리 수준 제어는 무조건 사이드 이펙트가 생김 (동시성 제어 kafka 사용 러닝 커브가 있음 queue) sqs사용 softlock 옵티미스락
상태값은 순차적으로
WAL ( Write-Ahead Loggin
트랜잭션이 시작할 때 스냅샷을 만들고 해당 트랜잭션은 그것을 가지고 동작!