[DB]MySql architecture

신동혁·2022년 8월 12일
0

DB

목록 보기
3/6

Mysql 전체적 구조

1. 접속클라이언트

Mysql은 대부분의 프로그래밍 언어에 대해 접속 API를 제공한다. 쉘에서도 접속 가능함.

2. 엔진

Mysql의 두뇌 역할로 요청된 sql문을 최적화해서 계획을 수립하는 부분이다.

2.1 쿼리파서

입력으로 들어온 sql문을 sql문법으로 확인 후 토큰 단위로 쪼개 '파스트리' 생성한다.

2.2 전처리기

'파스트리' 검사(실제로 존재하는 값인지, 접근권한 등등)

2.3 옵티마이저

최적화 실행 계획 수립

  • 규칙 기반 최적화 : 옵티마이저 내장된 우선순위에 따라 최적화
  • 비용 기반 최적화 : 작업의 비용과 대상 테이블의 통계정보를 활용해 최적화

2.4 쿼리실행 엔진

실행계획에 따라 스토리지 엔진에 요청을 보냄

3. 스토리지 엔진

Mysql의 손발 역할로 데이터를 실제로 디스크에 저장하거나 저장되 데이터를 불러온다.

3.1 InnoDB

대표적인 Mysql 스토리지 엔진이다.

  • pK에 의한 클러스터링 : 기본키를 기준으로 데이터를 묶어서 저장한다.

  • MVCC : 트랜잭션 격리 수준에 따라 레코드에 대한 조회가 InnoDB버퍼풀/언두로그로 나뉜다.

    • InnoDB버퍼풀 : 데이터를 디스크에 반영하기 전에 잠깐 버퍼링하는 공간

    • 언두로그(Undo Log) : 변경되기 이전 데이터를 백업, 트랜잭션 보장(rollback가능), 트랜잭션 격리 수준 보장(트랜잭션 격리 수준에 맞게 백업된 데이터 반환)

    • 리두로그(Redo Log) : 변경된 데이터를 백업(commit된 데이터), 영속성 보장(비정상 종료시 리두 로그에 백업된 데이터 복원)

    • READ_UNCOMMITTED : InnoDB버퍼풀 내용 조회

    • READ_COMMITTED : 언두로그 내용 조회

  • 레코드 잠금 : 데이터베이스에서 데이터를 변경할 때 동시성 문제를 고려해서 레코드를 잠근다. 이때 레코드 하나하나를 잠그는 것이 아니라 인덱스 레코드를 통해 뭉쳐서 잠근다. 즉, 인덱스를 세밀하게 설정할수록 잠기는 영역이 적어져 효율적으로 동작할 수 있다.

  • InnoDB버퍼풀 : 위에서 언급했듯 데이터 캐싱하는 역할을 하며 쓰기 작업을 지연시켜 한번에 작업되도록 하는 기능도 있다. 이런 기능들은 페이징 기능을 통해 싫행된다.

4. 운영체제, 하드웨어

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

profile
개발취준생

0개의 댓글