참조 Real Mysql8.0, Mysql Docs
innodb는 쓰기작업을 백그라운드에서 처리하기 때문에 디스크에 저장할 때 까지 기다리지 않아도 된다.
모든 글로벌메모리는 MySQL서버가 시작하면서 할당된다.
시작부터 바로 100% 할당할 수도 있고 조금씩 할 수도 있다.
필요할 때만 공간이 할당된다.
커넥션동안 할당되거나 (커넥선버퍼, 결과버퍼), 쿼리 실행하는 순간에만 할당(소트버퍼, 조인버퍼)한다
데이터 변경시 innodb 버퍼풀에서 언두로그로 기존 데이터를 복사하고 버퍼풀을 바로 수정한다.
데이터나 인덱스를 메모리에 캐시해주는 공간
동적으로 늘리는 과정보다 줄이는 과정이 시스템 영향도가 크므로 50%에서 점점 늘려가본다.
버퍼풀 인스턴스는 기본8개로 메모리 40G이하는 기본값, 그 이상은 인스턴스당 5G정도 되게 한다
버퍼풀 크기 = (128MB * 버퍼풀인스턴스)의 배수
버퍼풀은 데이터 캐시와 쓰기작업의 버퍼링 두가지 용도를 갖는다.
버퍼풀 사이즈만 늘릴 경우 데이터 캐시 용도로서의 기능만 향상되며 리두로그까지 늘려야 쓰기 버퍼링으로서의 용도도 성능이 향상된다.
가장 최근 체크포인트의 LSN과 마지막 리두 로그 엔트리의 LSN의 차이를 체크포인트 에이지라고 한다. 체크포인트 에이지는 활성 리두 로그 공간의 크기이다.
100GB 이하 에서는 5~10GB로 설정하고 조금씩 늘려가본다.
큰 문제가 없으면 건드릴 필요 없다.
클리너 스레드의 수, 버퍼풀 인스턴스 수랑 동일하게 맞추자. 버퍼풀 인스턴스보다 클 수 없다.
더티페이지의 비율, innodb_io_capacity 기준으로 더티페이지를 하드에 쓰며 이 값을 유지한다.
기본값 사용하자
기본10%, 이 값보다 더티페이지 비율이 클 경우 조금씩 디스크로 기록한다.
디스크 쓰기가 많이 발생하고 더티페이지 비율이 너무낮다면 좀 올리자
어느정도 디스크 읽기,쓰기가 가능한지 설정하는 값으로 일반적인 상황과 최대값을 의미한다.
이 값을 기준으로 더티페이지 쓰기를 실행한다.
스토리지 엔진은 다른 작업도 하므로 디스크의 성능을 그대로 쓰면 안된다.
기본값 사용, 위 innodb_io_capacity 같은 설정값에 의존하지 않고 새로운 알고리즘 사용한다.
기본값 10%, 이 값 이하에서는 어댑티브 플러시 알고리즘이 작동하지 않는다.
기본값 비활성, 더티페이지를 디스크에 기록할 때 근접한 페이지에 더티페이지가 있다면 함께 묶어서 기록할지 여부
하드디스크에서는 2(활성)을 추천하지만 ssd에서는 기본값으로 쓰자
innodb에서 사용자가 자주 요청하는 데이터에 자동으로 생성하는 인덱스
innodb_adaptive_hash_index 활성화 여부
innodb_adaptive_hash_index_parts 파티션 개수, 도움이 된다면 늘려서 잠금경합 줄인다.