모종닷컴

MySQL 스레딩 구조 본문

Programming/데이터베이스

MySQL 스레딩 구조

모종 2022. 7. 19. 23:53
반응형

MySQL 스레딩 구조

MySQL 서버는 프로세스 기반이 아닌 스레드 기반으로 동작한다. 그리고 이 스레드는 크게 포그라운드 스레드와 백그라운드 스레드로 나뉜다. 41개의 백그라운드 스레드와 3개의 포그라운드 스레드로 총 44개의 스레드가 실행중이다. 

위는 MySQL 서버가 전통적으로 가지고 있는 스레드 모델이며, 서버의 설정이나 어떤 에디션을 사용하는지에 따라 다를 수 있다.

 

포그라운드 스레드 = 클라이언트 스레드

  • MySQL 서버에 접속된 클라이언트의 수만큼 존재하며 클라이언트 사용자가 요청하는 쿼리 문을 처리
  • 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 스레드 캐시로 되돌아간다
    • 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료
  • 포그라운드 스레드는 데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 작업을 처리
  • InnoDB 테이블은 데이터 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 나머지 버퍼로부터 디스크까지 기록하는 작업은 백그라운드 스레드가 처리

백그라운드 스레드

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

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

InnoDB 에서 데이터를 읽는 작업은 주로 포그라운드 스레드에서 처리한다.

사용자의 요청을 처리하는 도중 데이터의 쓰기 작업은 지연(버퍼링)되어 처리될 수 있지만 데이터 읽기 작업은 절대 지연될 수 없다. 그래서 쓰기 작업을 버퍼링해서 일괄 처리한다 따라서 INSERT, UPDATE, DELETE 쿼리는 데이터가 변경되는 경우 데이터가 디스크의 데이터 파일로 완전히 저장될 때까지 기다리지 않아도 된다.

반응형