DB

MySQL Server

CoMeangMeangIn 2024. 11. 1. 18:39

1. MySQL Server

  - 오픈소스 관계형 RDBMS 중 하나로 전세계에서 가장 많이 쓰이는 DBMS 중 하나이다.

  - MySQL Server 는 크게 MySQL Engine과 Storage Engine으로 구성되어 있다. 

  - 여기서 중요한 점은 하나의 쿼리는 여러개의 하위 쿼리로 나뉘는데 이 하위 쿼리가 어느 영역에서 처리되는지 알아야한다.

  

  - Architecture

  • MySQL Server는 모든 언어에서 MySQL 서버로 쿼리를 사용할 수 있도록 지원한다. (SQL Interface)
  • Storage Engine 의 경우 여러개를 둘 수 있지만, MySQL Engine은 오직 하나만 사용한다.
  • Storage Engine을 통해 저장되는 실질적인 저장장치는 운영체제 하드웨어의 디스크이다.

2. MySQL Engine 이란?

  - MySQL Engine은 MySQL Server에서 두뇌역할을 맡는다.
  - 사용자의 요청 처리 및 최적화 역할을 갖고 있다.

  • 구성 요소
    • Connection Handler : 커넥션 및 요청 처리 담당
    • SQL Interface : DDL** , DCL** , DML** , View, Procedure 같은 인터페이스 제공 담당
    • SQL Parser : 쿼리문을 MySQL 이 처리하기 좋은 형태의 토큰으로 나누고, SQL 문의 문법 오류를 검출한다.
    • SQL Optimizer : 쿼리의 최적화된 실행을 담당한다.
    • Cache & Buffer : 성능 향상을 위한 보조 기억 담당(index 등)

▶  SQL Parser 토큰화 순서

- 토큰 단위로 나누어 트리의 형태로 파싱한다.

- 해석 가능한 단위로 분리되는 SQL문의 특성을 활용한다. 

 

  1. SQL문을 받는다.

SELECT name,age FROM user WHERE age > 20;

 

  2. 토큰화를 진행한다. (Tokenizing)

  • SELECT: 쿼리의 종류(선택 작업을 수행하는 명령어).
  • name, age: 선택할 열 이름들.
  • FROM: 선택 작업의 대상 테이블을 지정하는 키워드.
  • users: 테이블 이름.
  • WHERE: 조건을 지정하는 키워드.
  • age, >, 20: 조건을 구성하는 요소들.

  3. 파싱 트리(Abstract Syntax Tree) 를 생성한다.

SELECT
├─ Columns
│  ├─ name
│  └─ age
└─ FROM
   ├─ Table
   │  └─ users
   └─ WHERE
      ├─ Condition
         ├─ Column: age
         ├─ Operator: >
         └─ Value: 20

 

 

4. 오류검사

  - 이렇게 생성된 토큰들을 검사하며 문법에 오류가 있는지 체크한다.

 

▶ MySQL Engine를 통해 최적화된 실행 요청을 어떻게 Storage Engine에 보낼까?

  Handler API 를 통해 Handler Request를 Storage Engine에 보내어 요청한다. 

  • Handler Request : MySQL Engine에서 Storage Engine에 보내는 요청
  • Handler API : Handler Request를 보내기 위한 API 

  ▷ 즉, Storage Engine(InnoDB, MyISAM..)와 MySQL Engine은 Handler API를 통해 데이터를 주고 받습니다.

 

3. Storage Engine이란?

  - Handler API(Handler Request) 를 통해 받은 읽기 / 쓰기 기능을 수행하는 엔진

  - MySQL Engine과 플러그인 형태로 연동 / 분리가 가능하다.

  - 여러개의 Storage Engine을 하나의 MySQL Server에서 사용이 가능하다.

  - Storage Engine으로는 InnoDB, MyISAM, Memory 엔진들이 있다.

 

** 참고

  • DDL : 데이터 정의어, DB를 정의하는 언어이며 데이터를 생성, 수정, 삭제등의 데이터 전체의 골격을 정의하는 언어
    • CREATE, ALTER, DROP, TRUNCATE 가 있다.
  • DML : 데이터 조작어, 정의된 데이터 베이스에 입력된 레코드(인스턴스)를 조회, 삽입, 삭제, 수정등의 역할을 하는 언어
    • SELECT, DELETE, UPDATE, INSERT
  • DCL : 데이터 베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어
    • GRANT, REVOKE, COMMIT, ROLLBACK


참고 페이지 : https://jeong-pro.tistory.com/239, https://gngsn.tistory.com/197