-
2021.09.10 기록장TIL 2021. 9. 9. 22:54
ToDo
- 알고리즘 문제 풀기
- 책 읽기
- 회고 작성
Done
- 책 읽기
- 회고 작성
Weekly goal
- 책 읽기
1. db 풀은 동적으로 어떻게 증가시킬 것인가?
real mysql
82. 포그라운드 스레드
mysql서버에 접속한 클라이언트 수만큼 생성됨. 스레드 캐시가 있기에 작업이 완료된 스레드는 캐시로 들어감. 근데 정해진 수량이 초과되면 종료된다.
포그라운드 스레드의 역할은 데이터를 mysql의 데이터 버퍼나 캐시로부터 가지고 오고, 거기도 없으면 직접 디스크나 인덱스 파일까지 가서 데이터를 읽어오는 역할.
스토리지 엔진 중 myISAM은 디스크 쓰기 작업까지 하지만 InnoDB는 쓰기 작업을 백그라운드 스레드에게 맞긴다.
83. 백그라운드 스레드
여러 개가 있지만 중요한 것은 쓰기 스레드와 로그 스레드이다.
전자는 innoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드이다. innoDB는 쓰기 기능을 버퍼링으로 처리한다. 한 번에 몰아서 디스크에 쓰는 것이다.
하지만 MyISAM은 포그라운드에서 쓰기 작업까지 하기에 버퍼 작업을 할 수 없다.
86. 전체적인 흐름
MySQL에서 쿼리가 실행되는 과정 mysql엔진이 스토리지 엔진에게 데이터를 읽어오거나 저장하도록 명령하려면 반드시 핸들러를 통해야 한다.
실질적은 group by나 order by 등 복잡한 처리는 mysql엔진의 처리 영역인 쿼리 실행기에서 처리된다.
그럼 스토리지 엔진은 뭘 써도 똑같은 거 아닌가?라고 생각할 수 있지만 읽기/쓰기 작업 처리방식은 많이 달라질 수 있는 부분이다.
위의 그림은 쿼리 실행 과정에서 전처리기가 빠진 그림이다.
쿼리 파서 : 사용자의 요청으로 들어온 쿼리를 mysql이 인식할 수 있게 토큰으로 분리해 트리 형태로 만든다. 기본 문법 오류는 여기서 잡힌다.
전처리기 : 트리에서 문자의 구조적인 문제를 잡는다. 객체의 존재 여부나 접근 권한 등을 확인한다.
옵티마이저 : 사용자의 요청으로 들어온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지를 결정하는 역할
쿼리 실행기 : 실행 엔진은 만들어진 계획대로 각 핸들러에게 요청해서 받은 결과를 또 다른 핸들러 요청의 입력으로 연결하는 역할을 수행한다.
핸들러 (스토리지 엔진) : 실행기에서 봤듯이 핸들러는 데이터를 읽고, 저장하는 역할을 함.
스레드 풀은 mysql 커뮤니티 버전에서는 지원해주지 않는다. Percona Server의 스레드 풀 플러그인을 다운로드하여 사용할 수 있다.
만약 스레드 풀의 모든 스레드들이 동작중이면 스레드를 새로 만들던가 기다리던가 해야 한다.
이를 판단하는 방법은 thread_pool_stall_limit를 이용해서 스레드가 정해진 시간에도 일을 끝내지 못하면 스레드를 추가한다.
'TIL' 카테고리의 다른 글
2021.09.12 기록장 (0) 2021.09.11 2021.09.11 기록장 (0) 2021.09.11 2021.09.09 기록장 (0) 2021.09.05 2021.09.05 기록장 (0) 2021.09.04 2021.09.03~04 기록장 (0) 2021.09.02