고추참치 회고
Postgres 18에서 비동기 I/O가 도입된다고 합니다!
비동기 I/O는 여러 디스트 읽기를 병렬로 처리 가능하게 해서, CPU 활용도와 전체 처리량을 높이는 장점을 가져서 Postgres에도 도입이 된 거죠. (특히 고지연 클라우드 환경에서 이득!)
그러면 **MySQL(InnoDB)**에서는 이러한 비동기 I/O를 어떻게 처리했는지, 다시 한 번 확인해 봅시다.
<aside>
참고 챕터:

MySQL 서버는 스레드 기반으로 작동하며, 포그라운드 스레드와 백그라운드 스레드로 구분됨.
포그라운드 스레드:
주로 클라이언트 사용자가 요청하는 쿼리 문장을 처리 → 커넥션 종료 후 스레드 캐시로 돌아감
데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오고, 버퍼나 캐시에 없는 경우 직접 디스크에서 읽어옴
백그라운드 스레드:
여러 가지 작업을 백그라운드로 처리함.
| 스레드 종류 | 역할 |
|---|---|
| 로그 스레드 (Log Writer) | 로그 버퍼 → 디스크에 비동기 쓰기 |
| 쓰기 스레드 (Flush Thread) | 버퍼 풀의 더티 페이지를 디스크로 비동기 flush |
| 읽기 스레드 (Read I/O Thread) | 버퍼에 없는 페이지를 디스크에서 비동기 읽기 |
| Page Cleaner Thread | 백그라운드에서 주기적으로 페이지 flush |
| Purge Thread | 트랜잭션 undo 로그 정리 (디스크 작업 포함 가능) |
| Insert Buffer Merge Thread | insert buffer 내용을 실제 인덱스로 병합 시 디스크 갱신 |