(MySQL) MyISAM vs InnoDB

참고: http://ojava.tistory.com/25


  • InnoDB Storage Engine현재 Oracle에서 가장 밀고 있는 스토리지 엔진으로 In-Memory 특성을 가지고 있습니다. 메모리에 인덱스/데이터 모두 올려서 데이터를 처리하기 때문에 데이터 접근 속도가 상당히 빠릅니다. 메모리가 많이 허용되면 엄청난 퍼포먼스를 발휘하는 엔진이죠. 게다가 트랜잭션을 제공하고, 동시 데이터 처리 시에도 행 단위 잠금으로 처리하기 때문에 실제적으로 InnoDB Storage Engine은 OLTP 성 대용량 처리에 가장 적합한 스토리지 엔진이라고 볼 수 있습니다.
<InnoDB에서의 잠금 방식>
  • 비관적 잠금: 현재 트랜잭션에서 변경하고자 하는 레코드에 대해 잠금을 흭득하고 변경작업을 처리하는 방식을 비관적 잠금이라 한다. 이 처리방식에서 느낄 수 있듯이 현재 변경하고자 하는 레코드를 다른 트랜잭션에서도 변경 할 수 있다. 라는 비관적인 가정을 하기 때문에 먼저 잠금을 흭득한 것이다. 그래서 비관적 잠금이라고 부른다.일반적으로 높은 동시성 처리에는 비관적 잠금이 유리하다고 알려져있으며 InnoDB는 비관적 잠금 방식을 택하고있다.
  • 낙관적 잠금: 각 트랜잭션이 같은 레코드를 변경할 가능성은 상당히 희박할 것이라고 가정한다. 그래서 우선 변경 작업을 수행하고 마지막에 잠금 충돌이 있었는지 확인해 문제가 있었다면 ROLLBACK 처리하는 방식을 의미한다.
<InnoDB의 잠금 종류>
  1. 레코드락: 레코드 자체만을 잠그는것 중요한것은 InnoDB스토리지 엔진은 레코드 자체가 아니라 인덱스의 레코드를 잠그는 것이다. 
  2. 갭 락(Gap Lock): 레코드와 인접한 레코드 사이의 간격을 잠그는 것
  3. 넥스트 키락: 레코드락과 갭락을 합쳐 놓은 형태의 잠금.

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기