티스토리 뷰

스프링에서 데이터베이스를 학습하던 도중, WAS나 DB 접근 툴 같은 클라이언트를 사용해 DB서버에 접근 할 수 있다는 것을 학습했다. 이때, 클라이언트는 DB 서버에 연결을 네트워크 요청을 하여 TCP/IP 커넥션을 맺는다.

이때, DB 서버는 내부에 session이라는 것을 만드는데, 그리고 앞으로 커넥션을 통한 모든 요청은 이 session을 통해서 실행하게 된다고 하는데, session이 뭔지, 그리고 DB 내부에서도 요청을 thread per request로 처리하는지 궁금했다.

 

사실 MySQL의 SQL을 학습할 때에, 변수에 있어서 global variable, session variable이 있는것을 알았는데, session이 정확하게 뭔지 몰랐다.

 

1. MySQL에서의 Thread

MySQL 또한 thread 기반으로 동작한다고 한다. 

여기서 foreground thread와 background thread의 개념이 나오는데, foreground thread는 .NET과 자바 등에서 다르게 사용되는 개념인 것 같다. 

 

(1) 자바와  .NET에서의  Foreground thread VS Background thread

자바에서 foreground thread는 일반 user level thread를 지칭하고, background thread는 daemon thread를 지칭하여 종료되는 시점에 대한 차이라고 말한다. .NET에서도 동일한 의미로 사용하는 것 같다. (foreground thread가 프로세스에서 모두 종료되면 모든 background thread 또한 정지되고 종료된다)

출처 : 마이크로소프트 - threading

(2) MySQL에서의 Foreground thread VS Background thread

출처 : MySQL 8.0 documentation

MySQL에서의 Foreground thread는 user connection thread를 말하는 것이고

Background thread는 내부 서버 활동과 관련된 thread들을 말하는 것이다.

 

2. Foreground Thread

Foreground Thread는 Client Thread라고도 하며, MySQL 서버에 접속한 client 수만큼 존재하며, 각 Client 사용자가 요청한 쿼리를 처리한다.  

사용자가 작업을 마치고 session을 종료하면 해당 thread는 thread cache로 반환되고, thread cache에 일정 개수 이상의 thread가 있다면 종료 시켜 일정 개수만 유지한다. (thread_cache_size 변수로 관리)

InnoDB에서는 메모리에 read/write 작업만 담당하며 이 외의 작업은 background thread가 담당한다.

 

* [여기서 session이란 무엇일까?]

Connection은 물리적인 coummunication 채널이고 session은 client가 SQL 서버에 연결된 시점부터 나가는 시점까지의 시간을 말한다.

 

3. Background Thread

InnoDB의 경우, 많은 작업을 Background Thread가 수행한다.

MySQL 엔진 안에서 처리하는 여러 프로세스들, 즉 눈에 보이지 않는 백그라운드 작업들을 수행하는 것이다.

 

 

4. MySQL에서의 Thread 모델

MySQL에서는 전통적인 Thread 모델을 사용하지만, enterprise edition과 percona server에서는thread pool 플로그인이 포함되어있다.

커뮤니티 버전의 thread 모델은 Client Connection 당 하나의 Thread를 사용하여 명령문을 실행한다.

반면 Thread pool 플러그인은 성능 향상을 위해 대체 thread 처리 모델을 제공한다. 

 

 

 

[출처]

[자바에서의 foreground thread vs background thread]

https://www.quora.com/What-is-the-difference-between-a-foreground-thread-and-a-background-thread-in-Java

 

[.NET에서의 foreground thread vs background thread]

https://learn.microsoft.com/en-us/dotnet/standard/threading/foreground-and-background-threads?redirectedfrom=MSDN 

 

[MySQL에서의 foreground thread vs background thread]

https://dev.mysql.com/doc/refman/8.0/en/performance-schema-threads-table.html

 

[Session과 Connection의 차이점]

https://stackoverflow.com/questions/39199173

 

[MySQL Architecture - Thread]

https://blog.ex-em.com/1681

 
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday