Database/MySQL

MySQL's Storage Engines - InnoDB Engine

상쾌한기분 2019. 10. 22. 17:00
728x90
반응형
InnoDB Engine
 
** 개요 **
 
  • InnoDB는 가장 중요하며 광범위하게 활용적인 Default Transactional storage engine 이다.
    짧은 생명주기의 Transaction 처리 완료를 위해 디자인 되었다. (롤백 보다는)
 
  • InnoDB는 Tablespace 라고 알려진 한개 이상의 데이터 파일 시리지 안에 자체 파일을 저장한다.
    (Tablespace 는 근본적으로 InnoDB가 자기 자신을 관리하는 블랙박스이다.)
 
  • InnoDB는 각 테이블의 데이터와 인덱스들을 분리된 파일로 저장할 수 있다.
    (각각의 Tablespace를 만듬으로서 raw disk partition을 사용할 수 있다. 최신의 파일시스템이 이를 필요하지 않게 만들기는 했지만)
 

 
** MVCC **
 
  • 높은 동시 처리성을 성취하기 위해 MVCC를 사용하며, 모두 4개의 SQL 표준 Isolation Levels를 구현 하고 있다.
 
  • REPEATABLE READ Isolation level 기본으로 하며, next-key locking 전략으로 Isolation level에서 당신이 쿼리로 건드린 row만을 Locking 한다기 보다는 Phantom Read를 방지해준다.
 
  • 또한, Index 구조도 Lock gaps 함으로써, Phantom Insert를 방지해준다.
     
    (MVCC란? 다중 동시성 제어로 읽기 작업과 쓰기 작입어 서로 방해해 동시성을 떨어 뜨리고
    공유 Lock을 사용함에도 불구하고 데이터 일관성이 훼손될 수 있는 문제를 해결 해주는 방식)
 

 
** index 색인 **
 
  • InnoDB 테이블은 Clusterd index 구조를 가지며, 다른 MySQL의 storage engine들과는 매우 다르다
 
  • 결과적으로, 주키 색인이 매우 빠르다. 하지만, 주키가 아닌 Secondary index가 주키를 포함하고 있다면 다른 indexes들이 커질것이다.(디스크랑 메모리 업살녹?)
    따라서, 테이블에 많은 index를 위해서는 작은 주키를 가져야 한다.
 

 
** 최적화 **
 
  • InnoDB는 다양한 내부 최적화 방법을 가지고 있다.
     
  • Disk로부터 Prefetch를 위해 예측 읽기?(Predicitve read-ahead)
     
  • 빠른 색인을 위한 메모리 adaptive hash index 자동 빌드
 
 
728x90
반응형