트랜잭션 동시성 제어에 대해서 공부를 하는데 lock과 관련해서 많은 얘기가 나왔다. 생각보다 기본 개념이 안 잡힌 부분들이 있는 거 같아 이번 기회에 정리를 한 번 하고자 한다. 1. Shared and Exclusive Locks(sLocks and xLocks) InnoDB는 두 가지 유형의 row-level locking을 수행한다. shared Lock row를 조회하는데 필요한 lock Exclusive Lock row를 update/delete하는데 필요한 lock 시나리오 트랜잭션 T1, T2가 있을 때, T1이 특정 row를 read하기 위해 sLock를 가져갔다고 가정하자. T2가 같은 row에 대해서 read하기 위해 sLock 가져갈 수 있다. 하지만 T2가 같은 row에 대해서 u..
DB

저번 글([JPA] @Transactional과 synchronized를 동시에 사용할 때의 DB 동기화 이슈)에 이어 이번엔 왜 멀티 쓰레드 환경에서 하나의 트랜잭션에서 하나의 row 데이터에 접근하여 데이터를 변경하는 쿼리를 날리고(flush), 다른 트랜잭션에서 같은 데이터 row에 접근했을 때 변경되지 않은 데이터 값을 가져오는지 알아보기 위해 MVCC에 대해 알아보고 MySQL이 어떻게 동시성 제어를 하는지 보도록 한다. MVCC? Multi Version Control Concurrency의 약자로 다중 버전 동시성 제어라고 한다. Locking의 성능 문제 때문에 탄생하게 되었다. Lock을 사용하지 않고 일관된 읽기를 제공하는 것이 주 목적이다. 사용자는 MVCC에서 데이터에 접근할 때 S..
트랜잭션 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다. 이에 대한 특징은 원자성, 일관성, 독립성, 지속성이 있으며 이를 한꺼번에 ACID 특징이라고 한다. 하나의 트랜잭션에선 하나의 쓰레드만 동작한다. 원자성(Atomicity) 원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다. 일관성(Consistency) 일관성은 트랜잭션이 일어나기 전의 상황과 동일하게 ‘허용된 방식’으로만 데이터를 변경해야 하는 것을 의미한다. 격리성(Isolation) 격리성은 각각의 트랜잭션이 독립적으로 수행되어야 함을 의미한다. 격리 레벨 SERIALIZABL..
스키마란? 컴퓨터 과학에서의 스키마란 데이터베이스 구조와 제약조건에 관한 전반적인 명세를 기술한 메타데이터 집합이다. 스키마의 3층 구조 스키마는 사용자 관점에 따라서 외부, 개념, 내부 스키마와 같이 3층 구조로 나뉜다. 외부 스키마 프로그래머나 사용자 입장에서 DB모습으로 조직의 일부분을 정의한 것 개념 스키마 모든 응용 시스템과 사용자들이 필요로하는 데이터를 통합한 조직 전체의 DB 구조를 논리적으로 정의한 것 내부 스키마 실제 DB에 저장될 레코드의 물리적 구조를 정의하고, 저장 데이터 항목의 표현방법과 내부 레코드의 물리적 순서 등을 나타낸 것