(Database) MySQL서버 구조와 스레딩 구조

2022. 7. 9. 20:44컴퓨터 공학/DB

반응형

MySQL을 사용할 때, MySQL은 어떤 방식으로 동작하는지 알고 싶지 않은가?

 

MySQL은 다른 DBMS에 비해서 구조가 상당히 독특하다.

 

Transaction만 봐도 그렇다. 

 

Postgresql의 경우, transaction을 적용하고 싶으면, begin과 commit 을 명시해줘야 한다.

 

하지만 MySQL의 InnoDB의 경우 Transaction을 기본으로 지원하므로, 훨씬 편리하게 사용이 가능하다.

 

 

 

그럼 MySQL 엔진 아키텍처에 대해 알아보자.

 

🧐MySQL 전체 구조


 

MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로 부터 접근 방법을 모두 지원한다.

(개꿀)

 

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

 

 

MySQL 엔진


MySQL엔진은 커넥션 핸들러, SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시&버퍼로 이루어져있다.

 

커넥션 핸들러는 클라이언트로부터의 접속 및 쿼리 요청을 처리한다.

 

나머지 녀석들은 쿼리를 처리하는 방식에 필요한 인터페이스, 파서, 그리고 효율적 처리를 위한 옵티마이저 등이 있다.

 

 

 

 

스토리지 엔진

스토리지 엔진에는 InnoDB, MyISAM, Memory가 있다.

 

스토리지 엔진의 경우 핸들러 API만 만족하면 누구든지 스토리지 엔진을 구현해서 MySQL서버에 추가해서 사용할 수 있다는 장점이 있다.

 

 

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

(말 그대로 스토리지)

 

MySQL 서버에서 MySQL엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있다.

 

예를 들어

 

create table tt(id INT, name varchar(30)) ENGINE = INNODB;

이렇게 한 테이블만 스토리지 엔진을 지정해서 처리가 가능하다.

 

 

핸들러 API

아까 핸들러 API에 대해 잠깐 아래 처럼 언급했다.

스토리지 엔진의 경우 핸들러 API만 만족하면 누구든지 스토리지 엔진을 구현해서 MySQL서버에 추가해서 사용할 수 있다는 장점이 있다.

이 핸들러 API다.

 

데이터를 쓰거나 읽어야할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데, 이러한 요청을 핸들러 요청이라고 하고, 여기서 사용되는 API를 핸들러 API라고 한다.

 

 

 

🧐MySQL 스레딩 구조


 

MySQL은 프로세스 기반이 아니라 스레드 기반으로 구동된다. 

 

먼저 포그라운드 스레드에 대해서 알아보자.

 

포그라운드 스레드는 최소 사용자의 커넥션 만큼 존재하며, 사용자가 요청하는 쿼리 문장을 처리한다.

 

클라이언트 사용자가 작업을 마치고 커넥션을 종료하면, 해당 커넥션을 담당하던 스레드는 종료되지 않고, 

 

스레드 캐시로 되돌아 간다.

 

만약 스레드 캐시에 일정 개수 이상의 스레드가 존재한다면 스레드 캐시에 넣지 않고 스레드를 종료시켜 일정 갯의 스레드만 

 

스레드 캐시에 존재하게 한다.

 

 

 

포그라운드 스레드

포그라운드 스레드는 데이터를 MySQL 데이터의 버퍼나 캐시로부터 가져오며,

 

버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 처리한다.

 

MyISAM의 경우 쓰기까지 포그라운드 스레드가 처리하지만, InnoDB는 그렇지 않다.

 

InnoDB 테이블은 데이터 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 

 

디스크에 기록하는 작업은 백그라운드 스레드가 처리한다.

 

 

 

백그라운드 스레드

백그라운드에서 처리하는 스레드는 여러가지가 있는데 대표적으로 아래와 같은 것들이 있다.

 

  • 인서트 버퍼를 병합하는 스레드
  • 로그를 디스크로 기록하는 스레드
  • 데이터를 버퍼로 읽어오는 스레드
  • InnoDB의 버퍼 풀의 데이터를 디스크에 기록하는 스레드

 

 

 

 

 

 

 

반응형