CS/Data Base

[DB] MySQL 서버는 왜 스레드 기반일까?

hojak99 2021. 6. 22. 19:50

Real MySQL 이라는 책을 읽다가 104 페이지에서 다음과 같이 이야기하는 부분이 있었다.

MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동하며, 크게 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있다.


그렇다면 왜 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 동작하게 했을까? 라는 생각이 들었다. 우선 내 생각은 다음과 같다. 먼저 운영체제를 공부하다가 나오는 프로세스의 개념을 먼저 이해해야 한다. 간단하게 얘기하면 여러 N개의 스레드와 기타 등등으로 굴러가는 하나의 프로그램이라고 보면 된다. 크롬에서의 각각의 탭들을 예로 들 수 있다. 크롬 브라우저의 각 탭들은 하나의 프로세스들로 이루어져 있다. 그래서 탭이 10개라면 10개의 프로세스가 존재한다는 것이다. 이러한 이유 때문에 탭들을 많이 열면 그만큼 메모리도 많이 먹기도 하여 컴퓨터가 느려지게 느껴진다.

결국 위와 같은 현상을 보면서 한 가지 생각을 할 수 있게 된다. MySQL 이 프로세스 기반으로 동작을 하게 된다면 하나의 쿼리 요청마다 하나의 프로세스가 생기게 되버려 스레드를 기반으로 했을 때와 다르게 메모리나 cpu 에 드는 비용이 클 것이다. 또한, 내부적으로 스레드 풀을 이용해서 스레드를 종료시키거나 하는 거에 대한 비용을 줄이려고 하는데 이 또한 프로세스를 이용하게 되면 무용지물이 될 것이다. 또한, 프로세스는 스레드와 다르게 서로 간에 데이터를 공유하지 않는다. 그렇기에 하나의 데이터를 가져오도록 lock 을 거는 것이나 이런 부분에서 개발하기 힘들 것 같다.

또 다른 이유도 있겠지만 검색해도 잘 나오지 않는다. 그래도 위의 이유도 있으리라 생각해본다.

 

반응형