본문 바로가기

CS127

[MySQL] InnoDB의 Lock 알아보기 transaction rollback 시 auto increment 이슈에 대해 포스팅을 쓰고 Transaction Isolation level 자체에 대한 지식이 부족하다고 생각되어 포스팅을 쓰게 되었다. *아주 정리가 잘 되어있는 글을 보고 공부를 하였다. Intro ACID 원칙을 철저히 지킬수록 동시성은 낮아진다. ACID 원칙을 희생하여 동시성을 얻을 수 있는데, DB엔진이 제공해주는 isolation level에 따라 다양한 locking 전략을 적용할 수 있다. 이를 적용하면, isolation 원칙에 어긋날수록 문제가 발생할 가능성은 커지지만 동시성을 높일 수 있다. Isolation level ANSI/ISO SQL standard에서 정의한 isolation level은 READ UNC.. 2021. 8. 7.
[MySQL] Transaction rollback 시 Auto Increment 이슈 Intro 개발중 @Transaction을 사용하다가 insert 실패 시 rollback되는 경우가 있었다. 다음 insert문을 실행했을 때, 순차적인 값이 아닌 값이 나타났다. (1,2,3,8,13 .. 이런식으로) 원인 Transaction으로 인해 로직 자체는 rollback되었지만, 이미 테이블에 적용된 Auto Increment 값은 증가한 뒤였다. auto_increment는 transaction이 적용되지 않는다. 따라서, rollback이 적용되지 않는 것이다. 내가 겪은 원인 외에도, insert ignore int 문을 사용할 때 statement문 오류로 인한 이슈, 동시에 다수의 쿼리가 insert될 때 auto increment 필드 값이 증가될 수 있다. 어떻게 해결할까? a.. 2021. 8. 5.
[MySQL] MySQL의 스토리지 엔진 비교 (InnoDB, MyISAM, Archive) 트랜잭션을 공부하다가 InnoDB가 언급되었는데 거의 이름만 아는 수준이어서 공부를 하게 되었다. 분명 예전에 배운 것 같은데, 어디다 까먹는지 참. 포스팅해놓고 두고 두고 기억하자. MySQL의 엔진 MySQL은 크게 서버 엔진과 스토리지 엔진 두 가지 구조로 되어있다. 서버 엔진 클라이언트가 Query 요청 시, 쿼리 파싱과 스토리지 엔진 데이터를 용청하는 작업을 수행한다. 스토리지 엔진 물리적 저장장치에서 데이터를 읽어온다. 우리가 자주 듣는 InnoDB, MyISAM 등이 여기에 속한다. 스토리지 엔진은 데이터를 직접 다루기 때문에 엔진 종류마다 동작 원리가 다르다. 어제 포스팅했던 트랜잭션이나 성능 이슈와 밀접하기 때문에 꼭! 잘! 알아둬야 한다. 스토리지 엔진의 종류 엔진의 종류는 8가지나 있.. 2021. 8. 4.
[SQL] INDEX (인덱스) SQL Server에서 사용하는 INDEX에 대해 공부해보려한다. 데이터가 많을수록 쿼리를 잘 짜는 것도 중요하지만, 기본 개념을 잘 숙지하고 있도록 하자! 페이지(PAGE) 인덱스에 대해 알기 전, 페이지를 알아야 한다. 데이터 INSERT 시, 페이지에 들어가게 되고 그 페이지에서 SELECT를 한다. 대부분 Data로 구성되어 있지만, 일부 페이지는 인덱스(데이터 위치), 텍스트/이미지 등으로 구성되어 있다. SQL Server의 기본 저장 단위 (8KB) 1MB에는 128Pages가 존재 데이터를 읽을 때 페이지의 모든 행이 읽어짐 (참고 : https://laigo.kr/41, https://jungwoong.tistory.com/32) 힙(heap)? 인덱스를 알기 전, 인덱스가 적용되지 않은.. 2021. 7. 27.