티스토리 뷰

 

데이터베이스를 공부하면서 데이터베이스와 인스턴스, 그리고 하드웨어 코어위에 어떻게 올라가서 돌아가는지 궁금해져서 찾아보게 되었다.

물리적 하드웨어 코어, 하이퍼스레딩, 멀티스레딩, 멀티프로세싱이냐 멀티스레딩이냐 에 대한 개념들도 나오게 되었고, 오라클(Oracle)과 MySQL이 각각 어떤 방식을 쓰는지, 그리고 그게 실제 성능에 어떤 영향을 주는지 알아려고 한다.
DBMS는 기본적으로 여러 코어를 활용하며, 코어 수에 따라 성능이 좌우된다.

근데 잠깐, 멀티프로세싱이랑 멀티스레딩이 뭐야? 🤔


1. 멀티프로세싱 vs 멀티스레딩, 뭐가 다른데?

1) 멀티프로세싱 (Multi-processing)

  • 쉽게 말해서 여러 개의 독립된 프로세스를 만들어서 동시에 작업하는 방식
  • 프로세스끼리는 메모리를 따로 갖고 있어서 안전하지만, 서로 데이터를 주고받으려면 **IPC(Inter-Process Communication, 프로세스 간 통신)**이 필요해서 오버헤드가 있음
  • 여러 개의 CPU 코어를 활용할 수 있어서 병렬 처리에 유리함

👉 질문: "그럼 멀티코어를 써야 멀티프로세싱이 가능하다는 거야?"

그렇다. 단일 코어에서는 멀티프로세싱을 하더라도 사실상 CPU가 빠르게 왔다 갔다(Switching) 하는 거지, 진짜 병렬이 아니다. 멀티코어가 있어야 각 프로세스가 진짜로 동시에 실행될 수 있음.


💡 잠깐! CPU 코어(Core)와 스레드(Thread)의 관계에 대해서도 잠깐 짚고가자

  • CPU는 여러 개의 코어(Core)로 구성됨
  • 각 코어는 동시에 하나 이상의 스레드를 실행할 수 있음
  • 하이퍼스레딩(Hyper-Threading, HT) 기술이 적용된 경우, 1코어당 2개의 스레드를 실행할 수 있음

 

2) 멀티스레딩 (Multi-threading)

  • 하나의 프로세스 안에서 여러 개의 스레드를 만들어서 동시에 작업하는 방식
  • 스레드끼리는 메모리를 공유하니까 데이터 전달이 빠름
  • 하지만 한 스레드가 문제 생기면 다른 스레드에도 영향을 줄 수 있음 (안정성이 낮음)

👉 질문: "그럼 멀티스레딩은 멀티코어 없어도 가능해?"

단일 코어에서는 CPU가 스레드를 번갈아가면서 실행하는 것이기 때문에 실제 병렬은 아니고, 논리적인 동시 실행이다.

멀티코어가 있으면 진짜 동시에 병렬로 실행되면서 성능이 올라갈 것이다.


2. 오라클과 MySQL의 멀티프로세싱 & 멀티스레딩 차이점 ?

1) 오라클(Oracle)은 멀티프로세싱 기반

인스턴스 하나가 멀티프로세스로 실행되며, 각 프로세스 내부에서 멀티스레딩으로 동작

멀티프로세싱(Multi-Processing)

  • 오라클 인스턴스는 여러 개의 **백그라운드 프로세스(예: DB Writer, Log Writer, Checkpoint, Shared Server 등)**로 구성됨.
  • 즉, 하나의 인스턴스가 여러 개의 프로세스로 실행되므로 멀티프로세싱 환경임.
  • 여러 개의 프로세스는 여러 개의 CPU 코어에 분산되어 실행됨.

멀티스레딩(Multi-Threading)

  • 각 프로세스 내부에서 여러 개의 스레드를 실행할 수 있음.
  • 즉, 각 프로세스가 멀티스레딩을 지원하여 내부적으로 병렬 처리를 수행함.

🔹 오라클의 코어 활용 방식

  • 멀티프로세싱이기 때문에 각 프로세스는 여러 개의 CPU 코어에 할당됨
  • 각 프로세스 내부에서 다시 멀티스레딩을 사용하여 병렬 작업을 수행
  • 즉, 멀티프로세싱 + 멀티스레딩이 동시에 이루어지는 구조
    • 예시:
      • DB Writer 프로세스(1코어 할당) → 내부적으로 4개 스레드 실행
      • Log Writer 프로세스(1코어 할당) → 내부적으로 2개 스레드 실행
      • Shared Server 프로세스(2코어 할당) → 내부적으로 다수의 세션 처리

💡 오라클의 동작 방식

  • 클라이언트가 쿼리를 보내면, 오라클이 별도의 서버 프로세스(Server Process)를 생성해서 처리
  • 그리고 이 서버 프로세스들은 각각 독립적으로 실행되니까 안정적임
  • 백그라운드 프로세스도 따로 있어서 캐시 관리, 로그 저장, 복구 작업 같은 걸 별도로 수행
  • CPU 코어가 많을수록 프로세스를 잘 분산할 수 있어서 성능이 올라감

✅ 오라클의 장점 & 단점

장점:

  • 프로세스 간 격리가 돼서 안정성이 높음
  • 대규모 트랜잭션 처리(OLTP)에 최적화됨
  • CPU 코어를 병렬로 활용 가능

단점:

  • 프로세스 간 통신(IPC) 때문에 오버헤드 발생
  • 프로세스를 여러 개 띄우니까 메모리 사용량 증가

2) MySQL은 멀티스레딩 기반

반면 MySQL은 멀티스레딩을 기본 구조로 가져간다.

인스턴스 하나가 하나의 프로세스로 실행되지만, 내부적으로 여러 개의 스레드를 생성하여 여러 코어를 활용

💡 MySQL의 동작 방식

  • 클라이언트가 쿼리를 보내면, MySQL은 하나의 프로세스 안에서 새로운 스레드를 만들어 처리
  • 오라클처럼 프로세스를 여러 개 만드는 게 아니라, 하나의 프로세스에서 여러 개의 스레드를 생성하는 구조
  • 스레드끼리 메모리를 공유하니까 데이터 처리 속도가 빠름
  • 하지만 하나의 스레드가 장애가 나면 다른 스레드에도 영향을 줄 수 있음

👉 질문: "그럼 MySQL은 멀티코어를 못 쓰는 거야?"

아니지! MySQL도 멀티코어를 활용하는데, 각 스레드가 여러 코어에 분산돼서 실행되는 방식이야.

즉, 멀티코어 환경에서는 MySQL도 병렬 처리가 가능함!

✅ MySQL의 장점 & 단점

장점:

  • 하나의 프로세스에서 동작하므로 프로세스 간 통신(IPC) 오버헤드가 없음
  • 스레드 간 공유 메모리를 활용하여 빠른 데이터 처리 가능
  • 경량화된 구조로 인해 비교적 적은 리소스로도 실행 가능

단점:

  • 스레드 간 충돌 문제 발생 가능
  • 하나의 프로세스에서 모든 작업을 하다 보니, 안정성이 상대적으로 낮음
  • 대규모 시스템에서는 멀티프로세싱 기반인 오라클보다 성능이 떨어질 수 있음

3. 오라클과 MySQL의 멀티코어 활용 방식

💡 오라클과 MySQL 모두 단일 코어에서 실행되지 않고, 여러 개의 코어를 활용한다.

1) 오라클의 멀티코어 활용

  • 인스턴스 하나에 여러 개의 서버 프로세스와 백그라운드 프로세스가 분산 실행됨
  • 각 프로세스는 여러 개의 CPU 코어를 활용하여 멀티프로세싱을 수행
  • 내부적으로도 멀티스레딩을 지원하지만, 주된 방식은 멀티프로세싱

2) MySQL의 멀티코어 활용

  • 인스턴스 하나가 하나의 프로세스로 실행되지만, 내부적으로 여러 개의 스레드가 다양한 코어에서 실행됨
  • 멀티스레딩 기반으로 멀티코어를 활용하여 성능을 최적화
  • CPU 코어가 많을수록 성능 향상이 가능하지만, 스레드 동기화 문제 발생 가능

4. 결론: 오라클 vs MySQL, 언제 무엇을 사용할까?

오라클이 더 적합한 경우

  • 대규모 시스템, 트랜잭션이 많은 서비스
  • 안정성이 중요한 금융, 엔터프라이즈 환경
  • 멀티코어를 적극 활용해서 확장성을 높여야 하는 경우

MySQL이 더 적합한 경우

  • 웹 서비스, 스타트업, 가벼운 애플리케이션
  • 적은 리소스로 빠르게 데이터 처리를 해야 하는 경우
  • OLTP보다는 OLAP(분석/조회)에 더 초점이 맞춰진 경우OLTP에서는 오라클보다 안정성이 좀 떨어진다는 느낌 → 가벼운 쿼리 중심의 데이터조회(OLAP)에 유리한 면이 있음

결국 오라클은 멀티프로세싱 기반이라 안정적이고 대규모 트랜잭션에 강하고, MySQL은 멀티스레딩 기반이라 가볍고 빠르게 처리할 수 있음

→ 대규모 트랜잭션이면 오라클, 가볍고 빠른 웹 서비스면 MySQL

어떤 DB를 선택할지는 서비스 특성과 운영 환경에 따라 달라지게 된다는 것!


마무리

데이터베이스를 공부하면서 단순히 쿼리를 잘 작성하는 것만이 아니라, DBMS가 하드웨어에서 어떻게 동작하는지 궁금해졌다. 그러다 보니 자연스럽게 멀티프로세싱 vs 멀티스레딩, 그리고 오라클과 MySQL의 차이점까지 알아보게 되었다.

오라클은 멀티프로세싱 기반으로 여러 개의 프로세스를 독립적으로 실행하며, MySQL은 멀티스레딩 기반으로 하나의 프로세스 내에서 여러 스레드가 공유된 자원을 활용하는 방식이다. 이때 CPU의 멀티코어 및 하이퍼스레딩(HT) 기술이 중요한 역할을 한다. 멀티코어는 여러 개의 코어를 활용해 다수의 프로세스를 병렬로 실행할 수 있게 해주며, 하이퍼스레딩은 하나의 코어가 두 개의 논리적 스레드를 실행하도록 최적화된다. 이런 구조 덕분에 오라클은 여러 프로세스를 코어 단위로 분산 처리하는 데 유리하고, MySQL은 하나의 프로세스에서 여러 스레드를 실행하는 데 최적화되어 있다.

결국, 어떤 DBMS를 선택하느냐는 시스템의 특성과 요구 사항에 따라 달라진다. 이제 단순히 “어떤 DB가 더 빠를까?”가 아니라, “내가 설계하는 시스템에 적합한 DB는 무엇일까?”라는 질문을 던져볼 수 있을 것이다.

앞으로도 DB 성능 최적화와 구조적인 이해를 계속해서 쌓아가며, 더 나은 데이터 처리 방식을 고민해봐야겠다.