Open DaehunGwak opened 2 years ago
세션 스레드
백그라운드 스레드
로컬 메모리 : 세션 스레드에서 한 커넥션의 라이프 사이클 이내에 쓸만한 것이면 전부 여기.
글로벌 메모리 : 테이블처럼 모든 세션에서 같이 보고자 하는 공유 자원이 여기.
트랜잭션 롤백을 보장하고 보호 수준에 따른 적절한 격리 수준을 보장해주기 위한, 변경된 데이터의 과거 버전에 해당하는 것을 보존하는 로그.
회수 타이밍
사용중인 페이지를 리스트 형태로 관리.
자주 접근하는 페이지일수록 리스트의 머리로 가게 되므로 자연스럽게 안 쓰는 페이지는 뒤로 밀린다.
새롭게 접근하는 페이지는 5/8지점에 추가한다. 새로 접근하는 페이지도 마찬가지로 자주 접근할수록 앞으로 가게 됨.
사용중인 페이지에 대한 리스트(LRU)는 온디맨드 플러시
어댑티브 해시 인덱스
LRU 헤드쪽 데이터에 대해 자동으로 생성하는 인덱스.
B 트리가 아니라 해시 테이블로 동작한다. B 트리 검색에 걸리는 시간을 단축하기 위해 사용함.
유리할 때
Equal 검색이 많거나 일부 데이터만 조회하는 경우에는 성능 향상에 큰 도움이 된다. (해시 테이블 특성상)
메모리 IO가 잦을수록 유리하다. (어댑티스 해시 인덱스는 메모리에 해당하는, 버퍼풀에 접근할때만 사용되므로)
불리할 때
레인지 스캔 자주 하거나 다량의 데이터를 한번에 읽는 경우엔 무쓸모.(해시 테이블 특성상)
디스크 IO가 잦으면 무쓸모. (버퍼 풀에 자주 접근해야 성능 이득이 있다.)
쓸모 없는 경우에는 안 쓰는게 낫다. 해시 테이블도 엄연히 메모리의 한 구석을 차지하므로.
리두 로그 : 더티 페이지는 1:1 대응.
고로 리두 로그 공간 * (더티 페이지 크기 / 리두 로그 엔트리 크기) 만큼의 용량을 버퍼 풀에서 더티 페이지 처리로 쓸 수 있다는 것.
다시 보는 예제 (로그 엔트리 4KB, 페이지 사이즈 16KB라고 가정)
버퍼풀 100GB / 리두로그 100MB
더티 페이지 400MB까지 사용 가능
99.6GB가량은 클린페이지로만 쓸 수 있는 상태
DML 사용시 고확률로 상당한 병목이 발생할 것이기에 좋지 않다.
버퍼풀 100MB / 리두로그 100GB
리두 로그는 400GB까지 쓸 수 있으나 버퍼풀이 100MB고 리두 로그도 결국 버퍼 풀을 쓰므로 무의미한 수치다.
버퍼풀 전체에 리두 로그를 담을 수 있다는 것이니 이론상으로는 4:1 비율로 쪼개서 최대 80MB의 더티 페이지와 20MB의 리두 로그를 쓸 수 있음.
다루는 데이터의 크기에 따라 살아남을 수는 있겠지만 애초에 리두로그 100GB를 하는 것 자체가 무의미하여 좋지 않다.
진도
4.1 MySQL 엔진 아키텍처 4.2 InnoDB 스토리지 엔진 아키텍처
일시