DBMS/MySQL

[Real MySQL] 3장(1). 아키텍처 - MySQL 아키텍처

반응형

1. MySQL 아키텍처

MySQL 전체 구조

MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다.

 

MySQL 엔진

  • 커넥션 핸들러: 클라이언트로부터의 접속 및 쿼리 요청을 담당
  • SQL 파서
  • 전처리기
  • 옵티마이저: 쿼리의 최적화된 실행을 담당.

 

스토리지 엔진

  • 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분을 담당.

 

핸들러 API

  • 핸들러 요청: MySQL 엔진에서 각 스토리지 엔진에게 쓰기 또는 읽기를 요청

MySQL 스레딩 구조

MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동.

 

포그라운드 스레드

주로 각 클라이언트 사용자가 요청하는 쿼리 문장을 처리.

 

백그라운드 스레드

MyISAM과 달리 InnoDB는 여러 가지 작업이 백그라운드로 처리된다.

  • 인서트 버퍼를 병합하는 스레드
  • 로그를 디스크로 기록하는 스레드
  • InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드
  • 데이터를 버퍼로 읽어 들이는 스레드
  • 잠금이나 데드락을 모니터링 하는 스레드

등 다양한 작업이 백그라운드에서 처리된다.

 

(참고로 이중에서 가장 중요한 스레드는 로그 스레드 쓰기 스레드이다.)

SQL 처리 도중 데이터 쓰기 작업은 버퍼링 돼서 처리될 수 있지만, 데이터의 읽기 작업은 절대 지연될 수 없다.

 

MyISAM과 달리 InnoDB에서는 대부분 쓰기 작업을 버퍼링해서 일괄 처리하는 기능이 탑재되어 있음.

따라서 InnoDB에서는 INSERT, UPDATE, DELETE 쿼리로 데이터가 변경되는 경우, 데이터가 디스크의 데이터 파일로 완전히 저장될 때까지 기다리지 않아도 된다.


쿼리 실행 구조

파서

  • 사용자 요청으로 들어온 쿼리 문장을 토큰으로 분리해 트리 형태의 구조로 만들어 내는 작업 수행.
  • 쿼리 문장의 기본 문법 오류는 이 과정에서 발견되서 오류 메시지를 전달.

 

전처리기

  • 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인.

 

옵티마이저

  • 사용자의 요청으로 들어온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지 결정하는 역할.
  • DBMS의 두뇌

 

실행 엔진

  • 만들어진 계획대로 각 핸들러에게 요청해서 받은 결과를 또 다른 핸들러 요청의 입력으로 연결하는 역할 수행.

 

핸들러

  • MySQL 실행 엔진의 요청에 따라 데이터를 디스크로 저장하고 디스크로부터 읽어오는 역할.

복제 (Replication)

복제는 2대 이상의 MySQL 서버가 동일한 데이터를 담도록 실시간으로 동기화하는 기술.

 

마스터 서버

  • INSERT, UPDATE와 같은 데이터를 변경할 수 있는 MySQL 서버
  • 마스터 서버에서 실행되는 DML, DDL 가운데 데이터의 구조나 내용을 변경하는 모든 쿼리 문장은 바이너리 로그에 기록한다.

 

슬레이브 서버

  • SELECT 쿼리로 데이터를 읽기만 할 수 있는 MySQL 서버
  • 마스터 서버에 접속해 변경 내역을 요청하고 (바이너리 로그를 받음), 받아 온 변경 내역을 릴레이 로그에 기록.
  • 그리고 슬레이브 서버의 SQL 스레드가 릴레이 로그에 기록된 변경 내역을 재실행해서, 슬레이브의 데이터를 마스터와 동일한 상태로 유지.

요약) MySQL 복제는 마스터에서 처리된 내용이 바이너리 로그에 기록되고, 그 내용이 슬레이브 MySQL 서버로 전달되어 재실행되는 방식으로 처리된다.

 

복제 주의사항

  • 슬레이브는 하나의 마스터만 설정 가능
  • 마스터와 슬레이브의 데이터 동기화를 위해 슬레이브는 읽기 전용으로 설정
  • 슬레이브 서버용 장비는 마스터와 동일한 사양이 적합
  • 복제가 불필요한 경우 바이너리 로그 중지

쿼리 캐시

  • 쿼리의 결과를 메모리에 캐시해 두는 기능
  • 쿼리 캐시의 구조는 간단한 키와 값의 쌍으로 관리되는 맵과 같은 데이터 구조로 구현
  • 쿼리 캐시는 MySQL의 어떠한 처리보다 앞 단에 위치.

InnoDB 스토리지 아키텍처에 대한 정리는 다음 글에서 이어집니다!

 

[Real MySQL 정리] 3장. 아키텍처 - InnoDB 스토리지 엔진 아키텍처

2. InnoDB 스토리지 엔진 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중에서 거의 유일하게 레코드 기반의 잠금을 제공하고 있어서 높은 동시성 처리가 가능하고 안정적이며 성능이

willseungh0.tistory.com

 

감사합니다!

반응형