MySQL's Storage Engines - InnoDB Engine

2019. 10. 22. 17:00·Database/MySQL
반응형
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
반응형
'Database/MySQL' 카테고리의 다른 글
  • 데이터 베이스 설계 프로세스
  • Isolation level (트랜잭션 고립(격리) 수준)
  • 프로시저 언제 사용해야 하나?
  • 트랜잭션 너는 누구니?
상쾌한기분
상쾌한기분
  • 상쾌한기분
    상쾌한기분
    상쾌한기분
  • 전체
    오늘
    어제
    • 분류 전체보기 (250)
      • Python (44)
        • Python (26)
        • Django (6)
        • Flask (4)
        • Open Source (6)
      • Kotlin & Java (5)
        • Spring (2)
        • 프로젝트 (1)
      • Go (11)
      • Database (24)
        • MySQL (21)
        • Redis (3)
      • Infrastructure (2)
        • CDC (4)
        • Kafka (5)
        • Prometheus (2)
        • Fluentd (11)
        • Docker (1)
        • Airflow (2)
        • VPN (2)
      • IT (25)
        • AI (9)
        • Langchain (8)
        • Web (18)
        • Git (8)
        • 리팩토링 (9)
        • Micro Service Architecture (8)
        • Clean Code (16)
        • Design Pattern (0)
        • 수학 (1)
        • 알고리즘 (14)
      • OS (14)
        • Centos (10)
        • Ubuntu (3)
        • Mac (1)
      • Search Engine (2)
        • ElasticSearch (1)
        • Lucene Solr (1)
      • PHP (2)
        • Laravel (1)
        • Codeigniter (1)
  • 블로그 메뉴

    • Github 방문
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Golang
    fluentd
    ollama
    티스토리챌린지
    performance
    MYSQL
    Langchain
    파이썬
    go
    http
    Redis
    git
    CDC
    prompt
    docker
    LLM
    오블완
    python
    백준
    Kafka
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상쾌한기분
MySQL's Storage Engines - InnoDB Engine
상단으로

티스토리툴바