Open qkrqudcks7 opened 1 year ago
InnoDB가 주로 많이 사용되는 스토리지 엔진이지만 다른 스토리지 엔진도 같이 확인해보면 좋을 것 같아서 같이 보면 좋을 포스트 공유드려요. 책에도 MyISAM까지는 간단히 설명되어 있는데, Memory 엔진(혹은 TempTable)도 인지하고 있으면 좋을 것 같아요.
storage 엔진 관련 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html
엔진 설명 포스트 2: http://asuraiv.blogspot.com/2017/07/mysql-storage-engine.html
04. 아키텍처
MVCC( Multi Version Concurrency Control )
commit 이나 rollback이 안 된 상태에서 조회하면 어떤 값을 읽을까?
READ_UNCOMMITED
READ_COMMITTED 이상인 경우
InnoDB 버퍼 풀과 리두로그
InnoDB의 버퍼 풀은 서버의 메모리가 허용하는 만큼 크게 설정하면 할수록 쿼리의 성능이 빨라진다.
그러나 메모리 공간만 단순히 늘리는 것은 데이터 캐시 기능만 향상시키는 것이다. 버퍼 풀의 쓰기 버퍼링 기능까지 향상 시키라면?
dirty page는 언젠가 디스크에 기록되어야 한다. 버퍼 풀에 무한정 머무를 수 없다.
InnoDB 스토리지 엔진에서 리두 로그는 1개 이상의 고정 크기 파일을 연결해서 순환 고리처럼 사용한다.
즉 데이터 변경이 일어나면 리두 로그 파일에 기록된 로그 엔트리는 다시 새 엔트리로 덮어 쓰인다.
전체 리두 로그 파일에서 재사용 가능한 공간, 당장 불가능한 공간이 나뉘는데 불가능한 공간이 활성 리두 로그이다(화살표 가진 엔트리)
리두 로그 파일의 공간이 재사용될 수록 로그 포지션은 계속 증가된 값(LSN)을 가진다.
InnoDB 스토리지 엔진은 주기적으로 체크포인트 이벤트를 발생시켜 리두 로그와 버퍼 풀의 dirty page를 디스크로 동기화 시킨다.
발생한 체크포인트 중 가장 최근 지점의 LSN이 활성 리두 로그 공간의 시작점이 된다.
그러나 활성 리두 로그 공간의 마지막은 계속해서 증가하기 때문에 체크포인트와 무관하다.
그리고 가장 최근 체크포인트의 LSN과 마지막 리두 로그 엔트리 LSN의 차이를 checkpoint age라고 한다.
따라서
Q. InnoDB 버퍼 풀이 100GB, 리두 로그 파일의 전체 크기가 100MB인 경우
Q. InnoDB 버퍼 풀이 100MB, 리두 로그 파일의 전체 크기가 100GB인 경우
어댑티브 해시 인덱스
B- tree , Adaptive Hash Index
B-tree
Adaptive Hash Index
cpu 사용량
처리량
주의사항