개요 트랜잭션 격리 수준이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다.격리 수준은 크게 4가지로 READ UNCOMMITED, READ COMMITED, REPEATABLE READ, SERIALIZABLE이 있다. 순서대로 뒤로 갈수록 각 트랜잭션의 데이터 격리(고립)정도 높아지며, 동시 처리 성능도 떨어지는 것이 일반적이다.격리 수준\부정합 문제Dirty ReadNon-Repeatable ReadPhantom ReadREAD UNCOMMITED발생발생발생READ COMMITED없음발생발생REPEATABLE READ없음없음발생(MySQL InnoDB 스토리지 엔진은 거의 발생하지 않음.)SERIALIZ..
개요 InnoDB 스토리지 엔진은 MySQL 엔진 레벨의 락과 별개로 스토리지 엔진 내부에서 레코드 기반의 잠금 방식을 탑재하고 있다. 스토리지 엔진 레벨의 락은 테이블의 데이터를 다루기 위한 락이며, 종류는 다음과 같다. 레코드 락갭 락넥스트 키 락자동 증가 락레코드 락(Record Lock)레코드 자체만을 잠그는 것이 레코드 락(Record lock)이라고 하며, InnoDB 스토리지 엔진이 다른 상용 RDBMS와 다른 점은 인덱스의 레코드를 잠근다는 점에 차이가 있다. 인덱스가 하나도 없는 테이블이더라도 내부적으로는 자동 생성된 클러스터 인덱스를 이용해 잠근다. 즉, 변경해야 할 레코드를 찾기 위해 검색한 인덱스의 레코드를 모두 락을 건다. last_name에만 인덱스가 걸려 있다고 가정하고 예시를..
개요 Redis를 사용할 때 성능을 최적화하기 위해 여러 명령어를 한 번에 송신하여 네트워크 RTT(왕복 시간)을 줄일 수 있는 파이프라이닝(Pipelining) 기능이 있다. 만약 RTT시간이 250ms인 경우 서버가 초당 10만개의 요청을 처리할 수 있어도 초당 최대 4개의 요청만 처리할 수 있게 된다. 이런 문제를 파이프라이닝을 사용해 배치처리로 해결할 수 있다. [파이프라이닝 사용하지 않을 때]Client: GET key1SERVER: 100Client: GET key2SERVER: 200Client: GET key3SERVER: 500[파이프라이닝 사용할 때]Client: (파이프라인으로 전송)GET key1GET key2GET key3SERVER: (응답)100200500 "레디스는 싱글 스..