Programming/데이터베이스
MySQL 스레딩 구조
모종
2022. 7. 19. 23:53
반응형
MySQL 스레딩 구조
MySQL 서버는 프로세스 기반이 아닌 스레드 기반으로 동작한다. 그리고 이 스레드는 크게 포그라운드 스레드와 백그라운드 스레드로 나뉜다. 41개의 백그라운드 스레드와 3개의 포그라운드 스레드로 총 44개의 스레드가 실행중이다.
위는 MySQL 서버가 전통적으로 가지고 있는 스레드 모델이며, 서버의 설정이나 어떤 에디션을 사용하는지에 따라 다를 수 있다.
포그라운드 스레드 = 클라이언트 스레드
- MySQL 서버에 접속된 클라이언트의 수만큼 존재하며 클라이언트 사용자가 요청하는 쿼리 문을 처리
- 사용자가 작업을 마치고 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 스레드 캐시로 되돌아간다
- 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료
- 포그라운드 스레드는 데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 작업을 처리
- InnoDB 테이블은 데이터 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 나머지 버퍼로부터 디스크까지 기록하는 작업은 백그라운드 스레드가 처리
백그라운드 스레드
InnoDB에서는 여러 가지 작업이 백그라운드로 처리된다.
- Insert Buffer를 병합하는 스레드
- 로그를 디스크로 기록하는 스레드
- InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드
- 데이터를 버퍼로 읽어 오는 스레드
- 잠금이나 데드락을 모니터링하는 스레드
InnoDB 에서 데이터를 읽는 작업은 주로 포그라운드 스레드에서 처리한다.
사용자의 요청을 처리하는 도중 데이터의 쓰기 작업은 지연(버퍼링)되어 처리될 수 있지만 데이터 읽기 작업은 절대 지연될 수 없다. 그래서 쓰기 작업을 버퍼링해서 일괄 처리한다 따라서 INSERT, UPDATE, DELETE 쿼리는 데이터가 변경되는 경우 데이터가 디스크의 데이터 파일로 완전히 저장될 때까지 기다리지 않아도 된다.
반응형