DB

[DB]MySQL 아키텍처와 InnoDB스토리지 엔진 특징

마디니 2022. 3. 17. 20:54
반응형

MySQL 아키텍쳐

1.MySQL 접속 클라이언트

  • 대부분 프로그래밍어에게 접속 api를 제공한다.
  • Shell 스크립트를 통해서도 접속 가능

2.MySQL 엔진

  • 클라이언트 접속과 SQL요청을 처리 한다.
  • 쿼리파서, 전처리기, 옵티마이저, 실행엔진 등으로 이루어져 있다.

3.MySQL 스토리지 엔진

  • 데이터를 실제로 디스크에 저장하거나, 디스크에 저장된 데이터를 읽어오는 역할을 담당
  • 옵티마이저가 작성한 실행 계획에 따라서 스토리지 엔진을 적절히 호출해서 쿼리를 실행한다.

4.운영체제 파일 시스템과 하드웨어

  • 실제 테이블 데이터와 로그 데이터를 파일로 저장한다.

쿼리 실행 과정

1.쿼리 캐시

  • 사용자가 SQL요청을 Mysql로 보내면 쿼리 캐시(쿼리 요청결과를 캐싱하는 모듈)를 통해 동일한 SQL요청에 대한 결과를 즉시 받을 수 있다.
  • 캐싱하고 있는 데이터의 테이블이 변경되면 캐싱데이터가 삭제되는데, 이때 쿼리 캐시에 접근하는 쓰레드에 락이 걸려서 성능저하가 발생 할 수 있다. (Mysql 8.0 쿼리캐시가 완전히 삭제)

2.쿼리파서

  • SQL문장을 토큰으로 쪼개서 트리(Parse Tree)로 만든다.(이때 문법오류를 체크한다.)

3.전처리기

  • Parse Tree를 기반으로 SQL문장 구조를 체크, Parse Tree의 토큰이 유효한지 체크

4.옵티마이저

  • SQL실행을 최적화해서 실행 계획을 수립한다. 아래 두가지 방법을 사용한다.
  • (방법1)규칙 기반 최적화 : 옵티마이저에 내장된 우선순위에 따라 실행 계획을 수립한다.
  • (방법2)비용 기반 최적화 : 작업의 비용과 대상 테이블의 통계 정보를 활용해서 실행 계획을 수립한다.

5.쿼리 실행 엔진

  • 옵티마이저가 만든 실행 계획대로 스토리지 엔진을 호출해서 레코드를 읽고 쓴다.

6.스토리지 엔진

  • 쿼리 실행 엔진이 요청하는대로 데이터를 디스크로 저장하고 읽음
  • 핸들러 API에 의해 동작 (핸들러라고도 불린다)
  • 플러그인 형태로 제공되므로 사용자가 원하는 스토리지 엔진을 선택해서 사용할 수 있다.

MySQL스토리지 엔진

1.InnoDB스토리지 엔진

  • 프라이머리 키에 의한 클러스터링
    • 레코드를 PK순으로 정렬해서 저장
    • PK를 통해서만 레코드에 접근 가능
    • PK를 통한 범위 검색이 매우 빠르지만, 클러스터링 때문에 쓰기 성능 저하
    • PK를 생성하지 않으면 내부적으로 PK를 자동생성해서 사용한다. (그리고 사용자는 이 PK를 직접 사용할 수 없다.)
  • 트랜잭션 지원
  • MVCC(트랜잭션 격리 레벨에 따라 조회되는 데이터가 달라지게 하는 기술)
  • commit, rollback 제공,
  • Undo Log
    • 변경되기 이전 데이터를 백업
    • 랜잭션 보장(롤백시 언두로그에 백업된 데이터 복원)
    • 트랜잭션 격리 수준 보장(트랜잭션 격리 수준에 맞게 백업된 데이터 반환)
  • 리두 로그(Redo Log)
    • 변경된 데이터를 백업(Commit 완료된 데이터)
    • 영속성 보장(서버 비정상 종료시, 리두 로그에 백업된 데이터 복원)
    • MySQL이 비정상적으로 종료되면 리두로그를 통해 데이터 백업
  • 레코드 단위 잠금
    • 동시처리 성능이 좋다
    • 레코드 자체를 잠그는 것이 아니라 인덱스를 잠근다.
  • InnoDB버퍼풀
    • 버퍼풀은 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐싱해 두는 공간
    • SQL요청 결과를 일정한 크기의 페이지 단위로 캐싱한다.
    • 변경된 데이터를 버퍼풀에 모았다가, 한 번에 디스크에 기록
  • 어댑티브 해시 인덱스
    • <인덱스키, 페이지 주소값>쌍으로 구성된 인덱스
    • 페이지에 빠르게 접근하기 위해 사용
    • 사용자가 자주 요청하는 데이터에 대해 InnoDB가 자동으로 만들어준다.

2.MyISAMDB스토리지 엔진

  • 클러스터링, 트랜잭션, 외래키를 지원하지 않음
  • 테이블 단위 잠금
  • 키 캐시 사용(인덱스 정보만 버퍼링)
  • 전문 검색, 공간 좌표 검색 기능 지원

우아한테크 영상을 보고 정리한 글입니다.
https://www.youtube.com/watch?v=vQFGBZemJLQ

반응형