DB
-
MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과, 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다 MySQL 전체 구조 MySQL 엔진클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다.-> MySQL 엔진은 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 처리를 수행 스토리지 엔진데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담한다. MySQL 엔진MySQL Threading 구조 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동 Foreground thread주로 각 클라이언트 사용자가 ..
[MySQL] 4장 아키텍처MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과, 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다 MySQL 전체 구조 MySQL 엔진클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다.-> MySQL 엔진은 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 처리를 수행 스토리지 엔진데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담한다. MySQL 엔진MySQL Threading 구조 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동 Foreground thread주로 각 클라이언트 사용자가 ..
2025.01.12 -
기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
비관적 락 데드락 발생 내역 (Pessimistic Lock and DeadLock)기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
2025.01.08 -
잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.잠금동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 트랜잭션데이터의 정합성을 보장하기 위한 기능 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다. MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨, MySQL 엔진 레벨로 나눌 수 있다. (https://kkang-joo.tistory.com/163)MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 ..
[MySQL] 5장 트랜잭션과 잠금잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.잠금동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 트랜잭션데이터의 정합성을 보장하기 위한 기능 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다. MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨, MySQL 엔진 레벨로 나눌 수 있다. (https://kkang-joo.tistory.com/163)MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 ..
2025.01.04 -
Consistency, Availability, Partition tolerance3가지를 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리. 그림에서 가운데 영역에 들어가는 시스템은 존재할 수 없다. 각각의 요소들의 정의를 알아보자consistency 일관성모든 노드가 같은 순간에 같은 데이터를 볼 수 있다모든 노드는 동일한 데이터를 동시에 본다. 추가 읽기를 허용하기 전에 여러 노드를 업데이트하여 일관성을 확보한다분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐와 관계없이 언제나 같은 데이터를 보게 되어야 한다availability 가용성모든 요청이 성공 또는 실패 결과를 반환할 수 있다하나 이상의 노드가 작동 중지되어도 데이터를 요청하는 클라이언트는 반드시 응답을 받아야 ..
CAP 정리(브루어의 정리)Consistency, Availability, Partition tolerance3가지를 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다는 정리. 그림에서 가운데 영역에 들어가는 시스템은 존재할 수 없다. 각각의 요소들의 정의를 알아보자consistency 일관성모든 노드가 같은 순간에 같은 데이터를 볼 수 있다모든 노드는 동일한 데이터를 동시에 본다. 추가 읽기를 허용하기 전에 여러 노드를 업데이트하여 일관성을 확보한다분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐와 관계없이 언제나 같은 데이터를 보게 되어야 한다availability 가용성모든 요청이 성공 또는 실패 결과를 반환할 수 있다하나 이상의 노드가 작동 중지되어도 데이터를 요청하는 클라이언트는 반드시 응답을 받아야 ..
2024.06.29