실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어오는 부분을 담당
Mysql> CREATE TABLE test_table(fd1 INT, fd2 INT) ENGINE=INNODB;
test_table은 InnoDB 스토리지 엔진을 사용하도록 정의
MySQL 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때 각 스토리지 엔진에 쓰기 또는 읽기을 요청하는 이러한 요청을 핸들러(Handler) 요청이라 하고, 여기서 사용되는 API를 핸들러 API라고 한다.
핸들러 레코드 작업 확인 명령어
Mysql> SHOW GLOBAL STATUS LIKE 'Handler%'
MySQL 서버는 스레드 기반으로 작동, 포그라운드(Foreground)스레드와 백그라운드(Background)스레드로 구분 performance_schema 데이터베이스의 threads 테이블을 통해 확인
Mysql> SELECT thread_id, name, type, processlist_user, processlist_host
FROM performance_schema.threads
ORDER BY TYPE, THREAD_ID
포그라운드 스레드는 최소한 MySQL서버에 접속된 클라이언트의 수만큼 존재, 각 클라이언트 사용자가 요청하는 쿼리 문장 처리, 작업을 마치고 커넥션이 종료되면 다시 스레드 캐시(Thread cache)로 되돌아간다. 스래드 캐시에 유지할 수 있는 최대 스레드 개수는 thread_cache_size 시스템 변수로 설정
포그라운드 스레드는 데이터를 MySQL의 데이터 버퍼나 캐시로부터 가져오며, 버퍼나 캐시에 없는 경우에는 직접 디스크의 데이터나 인덱스 파일로 부터 데이터를 읽어와서 작업을 처리
MySQL의 독특한 구조 - 플러그인 모델
MySQL 엔진이 각 스토리지 엔진에게 데이터를 읽어오거나 저장하도록 명령하려면 반드시 핸들러 를 통해야 한다.
MySQL서버 플러그인의 단점들을 보완해서 구현됨
MySQL 서버에서 복제(Replication)는 중요한 역할을 담당
SQL의 실행 결과를 매모리에 캐시하고, 동일 SQL쿼리가 실행되면 테이블을 읽지 않고 즉시 결과를 반환
내부적으로 사용자의 요청을 처리하는 스레드 개수를 줄여서 동시 처리 되는 요청이 많다 하더라도
MySQL 서버의 CPU가 제한된 개수의 스레드 처리에만 집중할수 있기 해서 서버의 자원 소모를 줄이는 것이 목적
실제 서비스에서 눈에 띄는 성능 향상을 보여준 경우는 드물다.