요즘 책 'Real MySQL 8.0'과 'MySQL을 더 빠르게, 성능 최적화 선택과 집중' 이라는 책을 가지고 현업 개발자 2분과 스터디를 진행하고 있습니다. 각자 챕터를 읽어오고 각 주제별 리더가 주제에 맞는 방식으로 스터디를 리드했습니다.
챕터별 핵심 내용 위주로 가볍게 정리하고, 스터디에서 느낀점과 생각했던 부분을 정리하고자 합니다.
이 챕터는 'Real MySQL 8.0'을 읽고 이를 중심으로 작성한 글입니다.
MySQL 서버는 ‘쿼리를 처리하는’ MySQL 엔진과 ‘데이터 읽기/쓰기를 지원’하는 스토리지 엔진으로 구성된다.
MySQL 서버에서 MySQL 엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있다.
MySQL 스레딩 구조
MySQL 서버는 프로세스 기반이 아닌 스레드 기반으로 동작하는데, 스레드는 포그라운드 스레드와 백그라운드 스레드로 나뉜다.
메모리 할당 및 사용 구조
쿼리 실행 구조
스레드 풀
트랜잭션 지원 메타데이터
MySQL의 기본 스토리지 엔진이 InnoDB 스토리지 엔진이기 때문에 InnoDB 스토리지 엔진에 대해 알아보고자 한다.
MVCC (Multi Version Concurrency Control)
InnoDB 버퍼 풀
디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간으로 이 공간에 적절한 데이터를 배치하여 효율적으로 관리하는 것이 중요하다. 버퍼 풀에 있던 데이터를 비우는 방식은 크게 2가지가 있는데, 플러시 리스트 플러시와 LRU 리스트 플러시가 있다.
플러시 리스트 플러시 : 리두 로그 공간 비우기 위해 더티 페이지를 디스크로 동기화
LRU 리스 플러시 : 프리 페이지 늘리기 위해 LRU 낮은 페이지 디스크로 이동
리두 로그(redo log)와 언두 로그(undo log)
어댑티브 해시 인덱스
에러 로그 파일
제너럴 쿼리 로그 파일(제너럴 로그 파일, General log)
슬로우 쿼리 로그
관계형 데이터베이스 중에서도 대표적으로 사용되는 RDBMS인 MySQL이 SQL 문을 어떻게 처리하고 데이터를 어떻게 관리하는지는 아는 것은 매우 중요한 일이라 생각합니다. 그래서 여러번 반복해서 전체적인 틀을 익히는 시간을 가졌습니다.