MYSQL8. InnoDB 특징, 아키텍처

j_6367·2022년 1월 30일
0

mysql8

목록 보기
4/8

참조 Real Mysql8.0, Mysql Docs

백그라운드 스레드

  • 인서트버퍼를 병합하는 스레드
  • 로그를 디스크로 기록하는 스레드
  • 버퍼풀의 데이터를 디스크에 기록하는 스레드
  • 데이터를 버퍼로 읽어오는 스레드
  • 잠금이나 데드락 모니터링 하는 스레드

innodb는 쓰기작업을 백그라운드에서 처리하기 때문에 디스크에 저장할 때 까지 기다리지 않아도 된다.

메모리

글로벌

모든 글로벌메모리는 MySQL서버가 시작하면서 할당된다.

시작부터 바로 100% 할당할 수도 있고 조금씩 할 수도 있다.

  • 테이블캐시
  • innoDB 버퍼풀
  • innoDB 어댑티브 해시 인덱스
  • innoDB 리두 로그 버퍼

로컬

필요할 때만 공간이 할당된다.

커넥션동안 할당되거나 (커넥선버퍼, 결과버퍼), 쿼리 실행하는 순간에만 할당(소트버퍼, 조인버퍼)한다

  • 정렬 버퍼 (Sort buffer)
  • 조인 버퍼
  • 바이너리 로그 캐시
  • 네트워크 버퍼

아키텍처

언두로그, MVCC

데이터 변경시 innodb 버퍼풀에서 언두로그로 기존 데이터를 복사하고 버퍼풀을 바로 수정한다.

  • 언두로그를 읽으면 되서 일반 읽기에 잠금이 없다
  • 모든 트랜잭션에 필요없는 데이터가 될 경우 언두로그 영역의 기존 데이터를 삭제한다.
  • 트랜잭션이 안끝나고 언두로그가 계속 커지면 서버가 느려진다.
  • 자동 데드락감지시 종료할 스레드 기준을 언두로그가 작은순으로 정한다

버퍼풀

데이터나 인덱스를 메모리에 캐시해주는 공간

동적으로 늘리는 과정보다 줄이는 과정이 시스템 영향도가 크므로 50%에서 점점 늘려가본다.

버퍼풀 인스턴스는 기본8개로 메모리 40G이하는 기본값, 그 이상은 인스턴스당 5G정도 되게 한다

버퍼풀 크기 = (128MB * 버퍼풀인스턴스)의 배수

리두로그

버퍼풀은 데이터 캐시와 쓰기작업의 버퍼링 두가지 용도를 갖는다.

버퍼풀 사이즈만 늘릴 경우 데이터 캐시 용도로서의 기능만 향상되며 리두로그까지 늘려야 쓰기 버퍼링으로서의 용도도 성능이 향상된다.

가장 최근 체크포인트의 LSN과 마지막 리두 로그 엔트리의 LSN의 차이를 체크포인트 에이지라고 한다. 체크포인트 에이지는 활성 리두 로그 공간의 크기이다.

100GB 이하 에서는 5~10GB로 설정하고 조금씩 늘려가본다.

버퍼풀 플러시

  • 플러시 리스트 플러시
  • LRU 리스트 플러시

큰 문제가 없으면 건드릴 필요 없다.

플러시 리스트 플러시 관련 변수

innodb_page_cleaners

클리너 스레드의 수, 버퍼풀 인스턴스 수랑 동일하게 맞추자. 버퍼풀 인스턴스보다 클 수 없다.

inndb_max_dirty_page_pct

더티페이지의 비율, innodb_io_capacity 기준으로 더티페이지를 하드에 쓰며 이 값을 유지한다.

기본값 사용하자

inndb_max_dirty_page_pct_lwm

기본10%, 이 값보다 더티페이지 비율이 클 경우 조금씩 디스크로 기록한다.

디스크 쓰기가 많이 발생하고 더티페이지 비율이 너무낮다면 좀 올리자

innodb_io_capacity, innodb_io_capacity_max

어느정도 디스크 읽기,쓰기가 가능한지 설정하는 값으로 일반적인 상황과 최대값을 의미한다.

이 값을 기준으로 더티페이지 쓰기를 실행한다.

스토리지 엔진은 다른 작업도 하므로 디스크의 성능을 그대로 쓰면 안된다.

innodb_adaptive_flushing

기본값 사용, 위 innodb_io_capacity 같은 설정값에 의존하지 않고 새로운 알고리즘 사용한다.

innodb_adaptive_flushing_lwm

기본값 10%, 이 값 이하에서는 어댑티브 플러시 알고리즘이 작동하지 않는다.

innodb_flush_neighbors (이웃페이지 동시쓰기)

기본값 비활성, 더티페이지를 디스크에 기록할 때 근접한 페이지에 더티페이지가 있다면 함께 묶어서 기록할지 여부

하드디스크에서는 2(활성)을 추천하지만 ssd에서는 기본값으로 쓰자

어댑티브 해시 인덱스

innodb에서 사용자가 자주 요청하는 데이터에 자동으로 생성하는 인덱스

innodb_adaptive_hash_index 활성화 여부

innodb_adaptive_hash_index_parts 파티션 개수, 도움이 된다면 늘려서 잠금경합 줄인다.

0개의 댓글