의문 사항

매매데이터를 병렬로 처리로 개선하는 과정에서 데이터를 저장하는 테스트를 진행하였다.

결과를 보았을 때 기존의 동기 방식으로 데이터를 저장할 때는 도커의 CPU사용률이 일정하데 동일한 수준으로 사용하는 결과를 보여 준다.

하지만 비동기 병렬처리로 개선한 뒤 CPU자원을 일정하게 사용하지 않고 일정하지 않고 한 배치에서는 많이 사용하고 어느 배치에서는 적게 사용하는 결과를 보여주었다.

또한 기존의 동기식에서는 100일치 데이터를 수집하는데 1시간이라는 시간이 걸렸지만

비동기 병렬 처리에서는 8분이라는 엄청 개선된 결과를 보여 주었다.

이건 스프링 배치만이 아닌 MySQL의 특징 덕분에 가능한 결과이라는 생각이 들기 때문에 MySQL의 어떤 점 때문에 동기식과 비동기 병렬처리가 이렇게 성능 차이가 발생하는지 알아 보자


MySQL은 요청을 어떻게 받는가?

MySQL의 최대 커넥션의 수는 기본으로 151로 지정이 되어 있습니다. 그럼 애플리케이션에서 보면 만약 스프링에서 최대 커넥션을 40으로 설정을 하면 동시에 40개의 작업을 스레드 풀에서 스레드를 할당하여 작업을 진행합니다.

그럼 스프링에서 DB에 데이터를 CRUD하는 작업을 처리한다면 MySQL은 어떻게 처리를 할까요?

MySQL은 요청을 받으면 스프링과 동일하데 요청을 받으면 스레드를 생성하면서 쿼리를 처리합니다.

그럼 스프링에서는 스레드 풀에 스레드를 관리하고 재사용하는데 MySQL은 다음과 같이 스레드를 관하는 방법입니다.

MySQL의 스레드 관리 방식

🔹 기본 구조

🔹 스레드 캐시 (thread_cache_size)