CS/Database (12) 썸네일형 리스트형 [Real MySQL] 4. 아키텍처 - MySQL 엔진 아키텍처 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. (MySQL 서버 = MySQL 엔진 + 스토리지 엔진) MySQL 엔진은 클라이언트로부터 오는 요청 처리를 담당하고(SQL 분석, 최적화 등), 스토리지 엔진은 실제 데이터를 디스크에 저장하거나 조회하는 부분을 말한다. MySQL 엔진 커넥션 핸들러: 클라이언트와의 접속(커넥션), 그리고 쿼리 요청 처리를 담당한다. SQL 인터페이스: DML, DDL, Procedure, View 등 SQL 인터페이스 제공을 담당한다. SQL 파서: 클라이언트가 보낸 SQL에 문법 오류가 있나 확인하고, MySQL이 처리하기 좋은 토큰 단위로 나눠서 트리 형태로 파싱한다. SQL 옵티마이저: 쿼리의 최적화된 실행을 담당한다. 캐시와 버퍼: 성.. 공유 락/배타 락과 데드락 공유 락(Shared Lock)과 배타 락(Exclusive Lock) 공유 락(읽기 락) 공유 락이 걸린 데이터는 다른 트랜잭션에서 읽기만 가능하고 쓰기는 불가능하다. 즉, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션도 똑같이 공유 락을 획득할 수 있다. 단, 배타 락은 획득할 수 없다. 따라서 공유 락을 사용하여 조회한 데이터는 트랜잭션 내내 변경되지 않음이 보장된다. 배타 락(쓰기 락) 배타 락이 걸린 데이터는 다른 트랜잭션에서 읽기와 쓰기 모두 불가능하다. 즉, 배타 락이 걸린 데이터에 대해서 다른 트랜잭션은 공유 락, 배타 락 둘 다 획득할 수 없다. 즉, 배타 락을 획득한 트랜잭션은 해당 데이터에 대한 독점권을 갖는 것이다. 정리해보면 아래 표와 같이 배타 락이 개입하는 경우 양립이 불가능해.. MySQL의 MVCC(Multi Version Concurrency Control) MVCC의 가장 큰 목적은 잠금(락)을 사용하지 않는 일관된 읽기를 제공하는 데 있다. 그리고 InnoDB는 언두 로그(Undo log)를 통해 이 기능을 구현한다. 예제를 통해 MVCC가 어떻게 동작하는지 알아보자. 만약 트랜잭션 1이 데이터를 조회해와서 값을 변경("서울" -> "경기")했으며 아직 커밋하지 않은 상태라고 가정하자. 데이터를 변경하면, 커밋 여부와 상관없이 InnoDB 버퍼 풀에 변경된 데이터가 반영된다. 그리고 변경 전의 데이터는 언두 영역에 보관된다. 이때 트랜잭션 2가 해당 데이터를 조회하면 어떤 데이터가 조회될까? 이는 설정한 트랜잭션 격리 수준에 따라 다르다. READ_UNCOMMITTED: InnoDB 버퍼 풀이 현재 가지고 있는 변경된 데이터("경기")를 반환한다. REA.. 트랜잭션과 격리 수준 트랜잭션트랜잭션은 ACID라 해는 다음 4가지 성질을 만족시켜야 한다.원자성(Atomicity): 한 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다.일관성(Consistency): 트랜잭션 처리 후에도 데이터의 상태는 일관되어야 한다. 즉, 트랜잭션 처리 후에도 데이터베이스의 제약 조건이나 규칙을 만족해야 한다. 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.지속성(Durability): 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 DB에 오류가 발생해도 로그 등을 사용해서 트랜잭션 내용을 복구해야 한다.트랜잭션 격리 수준트랜잭션 간에 격리성을 완벽하게 보장하기 위해서는 각 트랜잭션.. 이전 1 2 다음