Open janeljs opened 2 years ago
CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB
SHOW GLOBAL STATUS LIKE 'Handler%'
SELECT thread_id, name, type, processlist_user, processlist_host FROM performance_schema, threads ORDER BY type, thread_id
클라이언트 사용자가 요청하는 쿼리 문장을 처리하는 스레드
기존의 플러그인 아키텍처를 컴포넌트 아키텍처로 대체 중
SQL 요청 -> MySQL 엔진 -> 쿼리파서 -> 전처리기 -> 옵티마이저 (DBA 핵심역량) -> 쿼리 실행기 -> 스토리지 엔진(핸들러) - InnoDB, MyISAM, Memory -> SQL 결과
버그 투성이라서 지금은 완전히 제거됨
돈을 내야하는 엔터프라이즈 에디션에서만 지원하는 기능
InnoDB 가 스토리지 엔진 중 유일하게 레코드 기반의 잠금을 제공
결론: InnoDB 가 짱이다!
InnoDB 가 짱이므로 자세한 설명은 생략한다.
InnoDB 의 버퍼 풀과 비슷한 녀석
InnoDB 보다 후져서 운영체제의 캐시 및 버퍼를 직접 사용한다.
MySQL 서버가 맛탱이가 갔을 때, 다음 로그들을 보면 좋다.
my.cnf
log_error
.err
general_log_file
long_query_time
04. 아키텍처
4.1 MySQL 엔진 아키텍처
4.1.1 MySQL 전체 구조
4.1.1.1 MySQL 엔진
4.1.1.2 스토리지 엔진
CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB
4.1.1.3 핸들러 API
SHOW GLOBAL STATUS LIKE 'Handler%'
4.1.2 MySQL 스레딩 구조
4.1.2.1 포그라운드 스레드(클라이언트 스레드)
클라이언트 사용자가 요청하는 쿼리 문장을 처리하는 스레드
4.1.2.2 백그라운드 스레드
4.1.3 메모리 할당 및 사용 구조
4.1.4 플러그인 스토리지 엔진 모델
4.1.5 컴포넌트
기존의 플러그인 아키텍처를 컴포넌트 아키텍처로 대체 중
4.1.6 쿼리 실행 구조
4.1.7 복제(Replication)
4.1.8 쿼리 캐시(Query Cache)
버그 투성이라서 지금은 완전히 제거됨
4.1.9 스레드 풀
돈을 내야하는 엔터프라이즈 에디션에서만 지원하는 기능
일반적인 쓰레드 풀 구조
4.1.10 트랜잭션 지원 메타 데이터
4.2 InnoDB 스토리지 엔진 아키텍처
InnoDB 가 스토리지 엔진 중 유일하게 레코드 기반의 잠금을 제공
4.2.1 프라이머리 키에 의한 클러스터링
4.2.2 외래 키 지원
4.2.3 MVCC(Multi Version Concurrency Control)
4.2.4 잠금 없는 일관된 읽기(Non-Locking Consistent Read)
4.2.5 자동 데드락 감지
4.2.6 자동화된 장애 복구
4.2.7 InnoDB 버퍼 풀
4.2.8 Double Write Buffer
4.2.9 언두 로그(Undo Log)
4.2.10 체인지 버퍼
4.2.11 Redo 로그 및 로그 버퍼
4.2.12 어댑티브 해시 인덱스
4.2.13 InnoDB 와 MyISAM, MEMORY 스토리지 엔진 비교
결론: InnoDB 가 짱이다!
4.3 MyISAM 스토리지 엔진 아키텍처
InnoDB 가 짱이므로 자세한 설명은 생략한다.
4.3.1 키 캐시
InnoDB 의 버퍼 풀과 비슷한 녀석
4.3.2 운영체제의 캐시 및 버퍼
InnoDB 보다 후져서 운영체제의 캐시 및 버퍼를 직접 사용한다.
4.3.3 데이터 파일과 프라이머리 키(인덱스) 구조
4.4 MySQL 로그 파일
MySQL 서버가 맛탱이가 갔을 때, 다음 로그들을 보면 좋다.
4.4.1 에러 로그 파일
my.cnf
에서log_error
에 정의된 경로에.err
확장자 파일로 생성됨4.4.2 제너럴 쿼리 로그 파일(제너럴 로그 파일, General log)
my.cnf
의general_log_file
에 정의된 경로에 생성4.4.3 슬로우 쿼리 로그
long_query_time
으로 설정한 실행 시간을 초과한 쿼리들을 기록