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

 

* 포그라운드(클라이언트) 스레드 : MySQL서버에 접속된 각 클라이언트 사용자가 요청하는 쿼리 문장을 처리한다.

    - 클라이언트 사용자가 작업을 마치고 커넥션을 종료하면, 해당 커넥션을 담당하던 스레드가 스레드캐시(Thread pool)로 되돌아 가는데, Thread_cache_size에 설정된 개수만큼 이미 스레드캐시에 대기중이면, 스레드캐시에 넣지 않고 스레드를 종료시킨다.

    - 데이터를 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우 디스크의 파일로부터 읽어와서 처리한다. MyISAM 테이블은 디스크 쓰기 작업까지 포그라운드 스레드가 처리하지만, InnoDB 테이블은 버퍼나 캐시까지만 포그라운드 스레드가 처리하고, 디스크까지 기록하는 작업은 백그라운드 스레드가 처리한다.

 

* 백그라운드 스레드 : MyISAM은 별로 해당사항은 없는 부분이지만, InnoDB는 많은 작업들이 백그라운드로 처리된다.

    - (Insert buffer를 병합, Log를 디스크로 기록, InnoDB 버퍼풀의 데이터를 디스크에 기록, 데이터를 버퍼로 읽어들이는 스레드, 여러가지 잠금이나 데드락을 모니터링하는 스레드, 모든 스레드를 총괄하는 메인 스레드)

    - InnoDB 스토리지 엔진 구조 링크 참조

 

**  InnoDB는 쓰기 작업을 버퍼링해서 일괄처리하는 기능이 탑재되어 있기 때문에, 데이터변경(Insert,update,delete) 작업시 디스크로 완전히 저장될 때까지 기다리지 않아도 되나, MyISAM은 포그라운드 스레드가 쓰기작업까지 함께 처리하도록 설계되어 있고, 쓰기 버퍼링 기능을 사용할 수 없다.

Print Friendly and PDF Posted by JJ*
: