mysql

· MySQL
개요spring JPA에서 MySQL skip locked를 활용한 성능 최적화 방법 설명선착순 쿠폰 발급 상황에서의 동시성 이슈를 고려하여 최적화MYSQL skip locked 관련 내용 ERD 하나의 쿠폰 테이블에서 모든 쿠폰 정보를 관리 새로운 쿠폰이 추가되면 새로운 쿠폰명/쿠폰타입으로 테이블에 데이터를 append하는 방식 유저ID가 NULL인 필드는 아직 발급되지 않은 쿠폰을 의미 JPA EntityUser Entity@Entity @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(n..
· MySQL
INSERTINSERT IGNORE다음과 같은 경우에 추가되는 레코드를 무시프라이머리 키나 유니크 인덱스 컬럼의 값이 이미 테이블에 존재하는 경우저장하는 레코드의 컬럼이 테이블의 컬럼과 호환되지 않는 경우INSERT … ON DUPLICATE KEY UPDATE프라이머리 키나 유니크 인덱스의 중복이 발생하면 UPDATE 문장의 역할을 수행LOAD DATALOAD DATA 명령은 단일 스레드로 실행되기 때문에 적재해야 할 데이터 파일이 매우 크다면 시간이 매우 길어질 수 있다.프라이머리 키 선정프라이머리 키의 선정은 “INSERT 성능”과 “SELECT 성능” 중의 하나를 선택하는 것INSERT가 매우 많이 실행되는 테이블의 경우, 프라이머리 키를 단조 증가 또는 단조 감소하는 패턴의 값을 사용하는 것이 ..
· MySQL
디스크 읽기 방식“데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐”가 관건HDD(Hard Disk Drive) vs SSD(Solid State Drive)HDD는 원판을 사용해 데이터를 읽지만, SSD는 플래시 메모리를 사용해 데이터를 읽는다.순차 I/O : SSD가 HDD보다 조금 빠르거나 비슷한 성능랜덤 I/O : SSD가 HDD보다 훨씬 빠르다.데이터베이스 서버 역시 순차 I/O 작업의 비중보다 랜덤 I/O 비중이 훨씬 크기 때문에 SSD의 장점은 DBMS용 스토리지에 최적이라고 할 수 있다.순차 I/O는 3개의 페이지를 디스크에 기록하기 위해 1번의 시스템 콜을 요청디스크에 기록해야 할 위치를 찾기 위해 디스크의 헤드를 1번 움직임(HDD 관점)랜덤 I/O는 3개의 페이지를 디스크에 ..
· MySQL
이전 글 https://larcane.tistory.com/46 Repeatable Read 하나의 트랜잭션 내에서 여러 번 조회를 해도 일관된 값을 읽는 것을 보장하는 격리수준 repeatable read에서는 phantom read가 발생할 수 있다. MySQL에서는 undo log를 통해 repeatable read를 보장 undo log에서 자신의 TID 이전의 값만 조회하도록 함 Lock을 사용하지 않는 조회의 경우에는 항상 repeatable read함을 보장 Phantom Read 다른 트랜잭션에 의해 추가(INSERT)된 레코드가 하나의 트랜잭션 내에서 보였다 안 보였다 하는 현상 MVCC 환경에서는 Repeatable read 수준에서 Lock을 사용하지 않는 조회의 경우 Phantom ..
· MySQL
트랜잭션(Transaction) : 하나의 논리적인 연산 단위논리적인 작업 셋을 완벽하게 처리하거나 처리하지 못 한 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상(partial update)을 방지하기 위함데이터의 정합성을 보장하기 위한 기능잠금(Lock) : 하나의 데이터를 하나의 커넥션에서만 접근할 수 있도록 해주는 기능동시성을 제어하기 위한 기능MySQL에서는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다.MySQL 엔진 레벨 : 모든 스토리지 엔진에 영향을 미침스토리지 엔진 레벨 : 스토리지 엔진 간 상호 영향을 미치지 않음격리수준 : 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정트랜잭션MySQL에서 MyISAM이..
larcane
'mysql' 태그의 글 목록