ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql 스레딩 구조
    데이터베이스 2025. 12. 14. 20:45

    1.개요

    mysql 프로세스가 어떻게 실행되는지를 정리해보았다.

     

    2.mysql 프로세스 동작

    myslq 서버는 프로세스 기반이 아니라 스레드 기반으로 작동되며 크게 포그라운 스레드, 백그라운드 스레드로 구분할 수 있다. mysql 서버에서 실행 중인 스레드의 목록은 다음과 같이 performance_schema 데이터베이스의 threads 테이블을 통해 확인할 수 있다.

    멀티 프로세스 기반 (크롬 브라우저) 탭별로 새로운 프로세스로 동작함(각 프로세스는 멀티 스레드로 동작)
    멀티 스레드 기반 (was, mysql 서버) 하나의 메인 프로세스가 실행되며, 이 프로세스 내에서 수많은 클라이언트 요청을 처리하기 위해 스레드 풀을 운영하며 여러 개의 워커 스레드를 관리합니다.

     

    3.포그라운드 스레드(클라이언트 스레드)

    포그라운드 스레드는 최소한 mysql 서버에 접속된 클라이언트 수만큼 존재하며, 주로 각 클라이언트 사용자가 요청하는 쿼리 문장을 처리한다. 클라이언트가 커넥션을 종료하면 해당 커넥션을 담당하던 스레드는 스레드 캐시로 되돌아간다. 만약 스레드 캐시에 일정 개수 이상의 대기 중인 스레드가 있으면 스레드 캐시에 넣지 않고 스레드를 종료시켜 일정 개수의 스레드만 스레드 캐시에 존재하게 된다. 이때 스레드 캐시에 유지되는 최대 스레드 개수는 thread_cache_size 시스템 변수로 설정한다.

     

    포그라운드 스레드는 데이터를 mysql 의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로부터 데이터를 읽어와서 작업을 처리한다. 데이터 쓰기와 같은 경우 스토리지 엔진에 따라 다르다. MyISAM 은 데이터 쓰기까지 포그라운드 스레드가 처리하지만 InnoDB 는 데이터 쓰기작업은 백그라운드 스레드가 처리한다.

    버퍼 변경된 데이터(Dirty Page)를 디스크에 바로 쓰지 않고 모아두는 역할. (쓰기 지연 버퍼링, RAM 에 존재함)
    캐시 디스크의 데이터 페이지를 메모리에 복사해두고 재사용하여 읽기 성능을 높이는 역할. (RAM 에 존재함)

     

    4.백그라운드 스레드

    MyISAM 은 별로 해당 사항이 없는 부분이지만 InnoDB는 다음과 같이 여러 가지 작업이 백그라운드 스레드로 처리된다.

    • 로그를 디스크로 기록하는 스레드
    • InnoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드
    • 데이터를 버퍼로 읽어 오는 스레드 (포그라운드 스레드가 클라이언트의 요청에 따라 데이터를 읽어오는 것은 맞지만, 느린 디스크 I/O 작업을 백그라운드로 넘겨서 처리 효율을 높이)
    • 잠금이나 데드락을 모니터링하는 스레드

    모두 중요한 역할을 하지만 그중에서도 가장 중요한 것은 로그 스레드와 버퍼의 데이터를 디스크로 내려쓰는 작업을 처리하는 쓰기 쓰레드이다. Mysql 5.5 버전부터 데이터 쓰기/읽기 스레드의 개수를 2개 이상 지정할 수 있게 됐으며 innodb_write_io_thread 와 innodb_read_io_thread 시스템 변수로 스레드의 개수를 설정한다. innodb 에서는 데이터 읽는 작업은 주로 클라이언트 스레드에서 처리되기 때문에 읽기 스레드는 백그라운드로 많이 설정할 필요가 없지만 쓰기 스레드는 아주 많은 작업을 백그라운드로 처리하기 때문에 일반적인 내장 디스크를 사용할 때는 2~4 정도, DAS 나 SAN 과 같은 스토리지를 사용할 때는 디스크를 최적으로 사용할 수 있을 만큼 충분히 설정하는것이 좋다.

     

    DAS (Direct Attached Storage) 및 SAN (Storage Area Network)

    이 둘은 데이터를 저장하는 별도의 전문적인 저장 장치를 의미하며, MySQL 서버와 물리적으로 분리되어 있습니다.

    저장 방식 DAS (Direct Attached Storage) SAN (Storage Area Network)
    의미 직접 연결된 저장소 네트워크 기반 저장소
    접근 방식 별도의 저장 장치가 케이블로 MySQL 서버에 직접 연결됩니다. MySQL 서버는 이를 마치 자신의 로컬 디스크처럼 인식하고 사용합니다. 별도의 고속 전용 네트워크(주로 Fibre Channel 또는 iSCSI)를 통해 연결됩니다. 서버는 스토리지를 하나의 블록 장치처럼 인식하고 사용합니다.
    핵심 특징 전용 I/O 채널을 가집니다. 일반 내장 디스크보다 훨씬 많은 I/O 요청을 병렬로 처리할 수 있는 고성능/고가용성 디스크 어레이가 내부에 있습니다. 다수의 서버하나의 중앙 집중식 저장소를 공유합니다. 이 역시 고성능 병렬 I/O 처리에 특화되어 있습니다.
Designed by Tistory.