개발/MySQL

MySQL] MySQL 퍼포먼스 최적화 (MySQL 구조)

펭귀니 :) 2022. 3. 19. 16:16

 

1. MySQL의 특징

MySQL은 전체적으로 어떻게 생겼나?

책에서는 MySQL을 '서버 엔진'과 '스토리지 엔진'으로 구분해서 설명한다.

서버 엔진
- 클라이언트의 요청을 받아 SQL을 처리하는 DB 자체의 기능적인 역할
- SQL Interface, Parser, Optimizer, Cache&Buffers
- 사용자와 MySQL 사이에서 발생하는 데이터 처리 프로세스의 대부분을 담당

스토리지 엔진
- 서버 엔진이 필요한 데이터를 물리 장치에서 가져오는 역할
- 물리적인 저장장치에서 데이터를 읽어오는 역할을 수행
- 다른 DBMS와 다르게 스토리지 엔진이 플러그인 방식으로 동작
 - 스토리지 엔진 종류 : InnoDB, MyISAM, MGR_MYISAM, BLACKHOLE, CSV, MEMORY, FEDERATED, ARCHIVE

  MyISAM InnoDB
스토리지 제한 256TB 64TB
트랜잭션 No Yes
Locking 레벨 Table Row
인덱스 B-Tree B-Tree
Cache Index Data/Index
파티셔닝 Yes Yes
Cluster Index
(인덱스 순서로 데이터가 저장되어 있는 구조)
No Yes
Foreign Key No  Yes

MyISAM - 텍스트 전문을 검색하는 '풀텍스트 인덱싱', 지리 정보를 처리할 수 있는 '지오메트릭 스파셜 인덱싱' 등의 기능 제공
               - 인덱스만 메모리에 올린다. 데이터는 디스크에서 바로 접근한다.
InnoDB - 인덱스와 데이터까지 메모리에 적재한다.

서버 엔진은 스토리지 엔진의 API를 호출하며, 실제 필요한 데이터를 요청하고 조작한다.

 

MySQL은 데이터를 어떻게 처리할까?

1. MySQL은 모든 SQL을 단일 코어에서 처리한다.
- 병렬 처리를 하지 않는다.
2. 테이블 조인을 Nested Loop Join 알고리즘으로만 처리한다.
- Nested Loop Join은 선행 테이블 A의 조건 검색 결과값 하나하나를 테이블 B와 비교하여 조인하는 방식
- Block Nested Loop Join : 테이블 조인 시 필요한 데이터를 메모리에 일시적으로 저장하여 위의 방식보다 효율적

 

📖 출처

성동찬 지음, 『MySQL 퍼포먼스 최적화』, 한빛미디어(2013)