티스토리 뷰
😀 engine
mysql engine
asni sql 문법을 지원합니다.
storage engine
실제 데이터를 디스크에 저장하거나 읽어오는 부분을 담당
mysql engine은 1개이지만 storage engine은 여러 개를 동시에 사용 가능
storage engine들은 성능 향상을 위해
myisam keycahe, innoDB bufferPool 같은 것들을 지원합니다.
(특정 테이블을 선택하여 다른 storage engine의 사용도 가능합니다.)
😀 handler API
mysql engine의 쿼리 실행기에서 데이터를 읽거나 써야 할 때
storage engine에 요청을 해야 합니다.
😀 mysql threading
mysql server는 thread기반으로 동작합니다.
크게 포그라운드 스레드(클라이언트 스레드), 백그라운드 스레드로 구분됩니다.
전통적인 모델에서는 커넥션 별로 클라이언트 스레드가 생성되나
enterprice 모델에서는 Pool방식을 사용할 수 있습니다.
😀 foreground thread(client thread)
최소한 mysql서버에 접속된 클라이언트의 수만큼 존재합니다.
주로 사용자가 요청한 쿼리 문장을 처리
작업이 종료되면 다시 스레드 캐시로 돌아갑니다.
이때 이미 스레드 캐시에 일정 개수 이상 존재하면
해당 스레드는 종료합니다.
포그라운드 스레드가 캐시나 버퍼에서 데이터를 가져오며 없는 경우
disk에서 가져옵니다.
1. storage engine을 InnoDB를 사용하는 경우
데이터 버퍼나 캐시까지만 foreground thread가 담당합니다.
그 이후 disk까지의 과정은 모두 InnoDB가 담당
2. storage engine을 MyISAM를 사용하는 경우
모두 foreground thread가 담당합니다.
😀 background enigne
myisam에는 해당하지 않지만 innoDB에 해당합니다.
insert buffer를 병합하는 스레드
로그를 디스크로 기록하는 스레드
innoDB 버퍼 풀의 데이터를 디스크에 기록하는 스레드
데이터를 버퍼로 읽어오는 스레드
잠금이나 데드락을 모니터링하는 스레드
mysql 5.5부터는 쓰기 스레드와 읽기 스레드를 2개 이상 지정 가능합니다.
innodb_write_io_threads
innodb_read_io_threads
데이터를 읽는 작업은 주로 client thread에서 처리하여 많은 수가 필요 없으나
쓰기 스레드는 매우 많은 일을 합니다.
쓰기 작업은 지연될 수 있지만
읽기 작업은 절대 지연될 수 없습니다.
(myisam 제외 모든 일을 client thread가 다하기 때문에)
😀 MYSQL SERVER
메모리 할당 및 사용 구조
Mysql에서 사용되는 메모리 공간은 크게 global, local 2가지 영역으로 구분됩니다.
글로벌 영역
이 영역의 메모리 공간은 mysql서버가 시작되면서
운영체제로부터 할당됩니다.
100% 할당해줄 수도 있지만 조금씩 할당해줄 수도 있습니다.
일반적으로 클라이언트 스레드수와 무관하게 1개의 공간만 할당됩니다.
세션 메모리 영역
mysql 서버에 존재하는 client thread가 쿼리를 처리하는데
사용되는 영역
각 스레드마다 독립적으로 할당되며 서로 절대 공유 도지 않습니다.
(JVM에서의 stack, process에서의 thread와 비슷?)
일반적으로 글로벌 영역 크기는 주의해서 설정하지만
세션 메모리 영역은 크게 신경 쓰지 않고 설정합니다.
😀 처리 영역
'데이터 읽기/쓰기'작업은 대부분 1건의 레코드 단위로 처리됩니다.
mysql 엔진이 스토리지 엔진에게 데이터 읽기/쓰기 명령을 하기 위해서는
반드시 핸들러를 통해야 합니다.
그리고 mysql 엔진 영역은 대부분 비슷하며
스토리지 영역의 차이만 있습니다.
실질적인 집계, 정렬 기능은 모두 mysql 엔진의 처리 영역인
'쿼리 실행기'에서 처리됩니다.
'DB' 카테고리의 다른 글
Mysql) data type ( update! ) (0) | 2022.06.23 |
---|---|
Mysql ) delimiter (0) | 2022.06.21 |
- Total
- Today
- Yesterday
- 관계설정
- 자바
- 백엔드
- 알고리즘
- JDK
- springboot
- 백준 제로
- jdk11
- jre
- 스택
- ㅃ
- jvm
- 스타트업
- 백준
- 자사서비스
- Spring
- 문제
- 프로그래머
- JDK8
- 백준 제로 자바
- boot 일대다
- JPA
- jre8
- java8
- 개발자채용
- 다대일
- jre11
- 코딩테스트
- boot
- mappedby
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |