공부노트/데이터베이스

    데이터베이스 Lock

    Lock Lock이란 트랜잭션이 동시에 실행되서 발생하는 동시성 문제를 해결하기 위해 동시성 제어를 위한 DB 의 장치이다. 레코드를 Lock 함으로써 다른 트랜잭션에서 업데이트는 못하고 읽기만 가능하다던가, 읽기도 불가능하게 하게 할 수도 있다. Lock 은 Shared Lock 과 Exclusive Lock 으로 나뉜다. Shared Lock Shared Lock은 해당 레코드를 조회만 타 트랜잭션에 허용하는 것이다. 이 락이 걸린 레코드 대상으로는 Select 만 할 수 있다. Update 하려면 Lock 이 해제될 때까지 기다려야 한다. 타 트랜잭션에서 Shared Lock 을 똑같이 설정할 수 있다. 하지만 Exclusive Lock 은 설정할 수 없다. SQL 문으로 다음과 같이 설정할 수 있..

    트랜잭션 격리 수준

    MySQL 기준으로 트랜잭션 격리 수준은 4단계가 있다. 격리 수준이 높은 순으로 정리. 1. SERIALIZABLE 가장 높은 격리 수준이다. 한 트랜잭션 내에서 언제든 반복해서 조회하더라도 동일한 결과가 나오는 repeatable read 가 보장된다. 트랜잭션이 실행되면서 실제 레코드에 바로 반영이 되지만서도, 언두로그에 트랜잭션 시작 전 레코드가 기록된다. 다른 트랜잭션에서는 백업된 언두로그를 읽는다. 단점은 단순한 Select 쿼리에서도 Shared Lock을 걸기 때문에 한번에 한 트랜잭션만 처리할 수 있어 한번에 많은 트랜잭션을 처리하지 못해 처리시간이 오래 걸릴 수 있습니다. 2. Repeatable Read 두번째로 높은 격리 수준이다. MySQL에서 기본으로 세팅된 격리 수준이다. 성능..

    ACID 원칙

    ACID 는 데이터베이스 무결성 보장하기 위해 트랜잭션의 설계 원칙이다. 'A' 는 Atomic 원자성으로 트랜잭션의 원자성이 보장되어야 한다. 트랜잭션 단위는 더이상 쪼개질 수 없는 작업 단위여야 한다. 트랜잭션이 중간에 중단되어도 트랜잭션 실행 전으로 DB 상태가 되어야 한다. 실행됐거나 안됐거나 2가지 결과 상태만 존재할 수 있어야 한다. 예를 들어, 새 유저를 추가하고 Role을 할당하는 트랜잭션이 있다고 가정한다. 실행 중에 새 유저만 추가되고 트랜잭션이 중단되었다면 새 유저 추가된 것은 rollback 되거나 DB에 반영되면 안된다. 반면 정상적으로 트랜잭션 완료되었다면 DB에 잘 반영되어야 한다. 'C'는 Consistency 일관성으로 트랜잭션 실행 전후로 DB 상태는 모순이 없어야 한다...

    [MySQL] InnoDB 아키텍처

    [MySQL] InnoDB 아키텍처

    MySQL 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 사용할 수 있 는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공. 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다 1. 프라이머리 키에 의한 클러스터링 InnoDB는 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 프라이머리 키 순서대로 디스크에 저장된다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프 라이머리 키의 값을 논리적인 주소로 사용. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라 이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리됨. 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정됨. 쿼리의 실행 계획에서 다른 보 조 인덱스보다 프라이머리 키가 선택될 확률이 ..

    MySQL 메모

    새로운 버전의 MySQL 서버를 선택할 때도 최소 GA 버전은 지나서 15~20번 이상의 마이너 버전을 선택하는 것이 좋다 항상 메이저 버 전 업그레이드를 할 때는 MySQL 서버의 매뉴얼을 정독한 후 진행할 것을 권장 MySQL 새로운 버전을 업그레이드하기 전 mysqlcheck 를 통해 호환성을 체크해볼 수 있다. 시스템 계정 권한 계정관리(계정생성및삭제,그리고 계정의권한 부여 및 제거) 다른세션(Connection) 또는 그 세션에서 실행중인 쿼리를 강제종료 스토어드 프로그램 생성시 DEFINER를 타사용자로 설정 시스템 계정과 일반 계정의 개념이 도입된 것은 DBA(데이터베이스 관리자) 계정에는 SYSTEM_ USER 권한을 할당하고 일반 사용자를 위한 계정에는 SYSTEM_USER 권한을 부여하..

    MYSQL 엔진 아키텍처

    MYSQL 엔진 아키텍처

    출처: Real-MySQL 8.0 1. MySQL 전체 구조 MySQL 엔진 접속을 처리하고 요청한 SQL 분석, 최적화, 실행 수행 클라이언트로부터 접속 및 쿼리 요청을 처리하는 '커넥션 핸들러' 'SQL 파서' 및 '전처리기' 쿼리의 최적화된 실행을 위한 '옵티마이저' 한 MySQL 서버에서 한 엔진 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장하거나 데이터를 불러오는 역할 수행 한 MySQL 서버에 여러 개의 스토리지 엔진을 동시 사용 가능 CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB; 성능 향상을 위한 키 캐시(MyISAM 스토리지 엔진), InnoDB 버퍼 풀(InnoDB 스토리지 엔진) 기능 제공 MySQL 에서 대체 가능한 Sto..