목록Database/Real MySQL 8.0 (4)
개발자는 기록이 답이다
InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공한다. 그 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. 1. 프라이머리 키(PK)에 의한 클러스터링 엔진 InnoDB MyISAM 클러스터링 키 지원 지원 미지원 물리적 주소 사용 프라이머리 키 값 레코드의 주소 값 InnoDB 스토리지 엔진 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 즉, 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리 될 수 있다. 결과..
1. 쿼리파서 사용자 요청으로 들오온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만들어내는 작업. 쿼리 문장의 기본 문법 오류는 이 과정에서 발견되고 사용자에게 오류 메세지를 전달한다. 2. 전처리기 파서과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에서 구조적인 문제점이 있는지 확인한다. 각 토큰을 테이블 이름이나 칼럼 이름, 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근권한 등을 확인하는 작업을 수행한다 실제 존재하지 않거나 권한 상 사용할 수 없는 개체의 토큰은 이 단계에서 걸러진다. 3. 옵티마이저 사용자의 요청으로 드러온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지 결정하는 역할 DBMS의 두뇌에 해..
MySQL에서 사용되는 잠금은 스토리지 엔진 레벨 과 MySQL엔진 레벨로 나눌 수 있다 MySQL엔진은 MySQL 서버에서 스토리지 엔진을 제외한 나머지 부분으로 이해하면 되는데, MySQL엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치지만, 스토리지 엔진 레벨의 잠금은 스토리이 엔진 간 상호 영향을 미치지 않는다. MySQL 엔진에서는 테이블 데이터 동기화를 위한 테이블 락 이외에도 테이블 구조를 잠그는 메타데이터 락 그리고 사용자의 필요에 맞게 사용할 수 있는 네임드 락이라는 잠금 기능도 제공한다 잠금의 특징과 이러한 잠금이 어떤 경우에 사용되는지 한번 살펴보자 5.2.1 글로벌 락 글로벌 락(GLOBAL LOCK)은 FLUSH TABLES WITH READ LOCK명령으로 획득할 수 있으며,..
MySQL의 동시성 관리: 잠금(Lock)과 트랜잭션, 트랜잭션의 격리 수준(Isolation level) 트랜잭션은 작업의 완전성을 보장해주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어준다. 잠금(Lock)과 트랜잭션은 서로 비슷한 개념이지만 사실 잠금은 동시성을 제어하기 위한 기능이고, 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 하나의 회원 정보 레코드를 여러 커넥션에서 동시에 변경하려고 하는데 잠금이 없다면 하나의 데이터를 여러 커넥션에서 동시에 변경할 수 있게 된다. 결과적으로 해당 레코드의 값은 예측할 수 없는 상태가 된다. 잠금 : 여러 커넥션에서 동시에 동일한 자원을 요..