본문 바로가기

책/Real MySQL 8.0

chapter 4. 아키텍처 (1)

반응형

 

 

 

4.1.1 MySQL Engine Architecutre


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

 

MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러

SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을이룬다 

 

 

4.1.1.1  MySQL 엔진 

또한 MySQL은 표준 SQL(ANSI SQL) 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 다른 DB에도 호환되어 실행될 수 있음 

다만 자체 문법을 가지고 있는 DB(Oracle, Postgre) 같은 경우 다를 수 있음 다만 큰틀에서는 같은 의미로 말할 수 있음 

 

 

4.1.1.2  Stroage 엔진 

MySQL 엔진은 요청된 SQL 문장을 분석하거나 최적화 하는 등 DBMS의 두뇌에 해당하는 처리를 수행하고, 

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

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

// 이런식으로 같이 테이블에 사용할 스토리지 엔진을 지정하면 이후 해당 테이블의 모든 읽기 작업이나 변경은 정의된 스토리지 엔진이 처리함
CREATE TABLE test_table (fd1, INT, fd2 INT)) ENGINE=INNODB;

각 스토리지 엔진은 성능 향상을 위해

키 캐시(MyISAM 스토리지 엔진)나 InnoDB 버퍼 풀(InnoDB 스토리지 엔진)과 같은 기능을 내장하고 있다 

 

 

4.1.1.3  Handler API

MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데,

이러한 요청을 핸들러 요청이라고 한다. InnoDB 스토리지 엔진 또한 이 핸들러 API를 이용해 MySQL 엔진과 데이터를 주고받는다

 이 API를 이용해서 얼마나 많은 데이터(레코드) 작업이 있었는지 다음과 같이 확인할 수 있다 

 

 

 

 

4.1.2 MySQL Threading 구조 


MySQL 서버는 프로세스 기반이아니라 스레드 기반으로 작동하며, 크게 포그라운드 스레드와 백그라운드 스레드러 구분할 수 있다 

 

전체 44개의 스레드가 실행 중이며, 그중 41개의 스레드가 백그라운드 스레드이고 나머지 3개만 포그라운드 스레드로 표시돼 있다 

그런데 이중 마지막 thread/sql/one_connection 스레드만 실제 사용자의 요청을 처리하는 포그라운드스레드다 

백그라운드 스레드 개수는 MySQL 서버의 설정의 내용에 따라 가변적일 수 있다

동일한 이름의 스레드가 2개 이상씩 보이는 것은 MySQL 서버의 설정 내용에 의해 
여러 스레드가 동일 작업을 벙렬로 처리하는 경우 

 

4.1.2.1  포그라운드 스레드(클라이언트 스레드)

포그라운드 스레드는 최소한 MySQL 서버에 접속된 클라이언트의 수만큼 존재하며,

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

 

클라이언트 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 다시 스레드 캐시로 되돌아간다 

이때 이미 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료시켜 

일정 개수의 스레드만 스레드 캐시에 존재하게 된다 이때 스레드 캐시에 유지할 수 있는 최대 스레드 개수는 

thread_cache_size 시스템 변수로 설정한다 

 

 

반응형

' > Real MySQL 8.0' 카테고리의 다른 글

Chapter 2. 설치와 설정 (1)  (0) 2023.12.19