고추참치 회고

Postgres 18 GeekNews

Postgres 18에서 비동기 I/O가 도입된다고 합니다!

비동기 I/O는 여러 디스트 읽기를 병렬로 처리 가능하게 해서, CPU 활용도와 전체 처리량을 높이는 장점을 가져서 Postgres에도 도입이 된 거죠. (특히 고지연 클라우드 환경에서 이득!)

그러면 **MySQL(InnoDB)**에서는 이러한 비동기 I/O를 어떻게 처리했는지, 다시 한 번 확인해 봅시다.

<aside>

참고 챕터:

책 복습하기

4.1.2 MySQL 스레딩 구조

IMG_E2977816194C-1.jpeg

MySQL 서버는 스레드 기반으로 작동하며, 포그라운드 스레드와 백그라운드 스레드로 구분됨.

포그라운드 스레드:

주로 클라이언트 사용자가 요청하는 쿼리 문장을 처리 → 커넥션 종료 후 스레드 캐시로 돌아감

데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오고, 버퍼나 캐시에 없는 경우 직접 디스크에서 읽어옴

백그라운드 스레드:

여러 가지 작업을 백그라운드로 처리함.

스레드 종류 역할
로그 스레드 (Log Writer) 로그 버퍼 → 디스크에 비동기 쓰기
쓰기 스레드 (Flush Thread) 버퍼 풀의 더티 페이지를 디스크로 비동기 flush
읽기 스레드 (Read I/O Thread) 버퍼에 없는 페이지를 디스크에서 비동기 읽기
Page Cleaner Thread 백그라운드에서 주기적으로 페이지 flush
Purge Thread 트랜잭션 undo 로그 정리 (디스크 작업 포함 가능)
Insert Buffer Merge Thread insert buffer 내용을 실제 인덱스로 병합 시 디스크 갱신