본문 바로가기
공부/Mysql

[RealMysql 8.0]04아키텍처 4.2.7.5 ~ 4.2.8

by 띵커베르 2023. 1. 30.
728x90
  • 버퍼 풀 상태 백업 및 복구
    • 빈번한 쿼리 요청시 버퍼 풀에 쿼리들이 사용할 데이터가 준비돼 있으면 디스크에서 데이터를 읽지않고도 쿼리가 처리될 수 있다.
      • 이렇게 버퍼 풀에 쿼리들이 준비된 상태를 워밍업 이라고 표현한다.
    • mysql 5.5 버전에는 mysql 을 다시 시작할 경우 서비스 오픈전에 강제 워밍업을 위해 주요 테이블과 인덱스에 대해 풀 스캔을 실행하였었다.
    • mysql 5.6 부터는 버퍼 풀 덤프 및 적재 기능이 도입되어, 시스템 변수를 통해 퍼버 풀의 상태를 백업하였고, 다시 시작시 시스템 변수를 이용해 백업된 버퍼 풀의 상태를 다시 복구 한다.
    • innodb 버퍼풀의 백업은 데이터 디렉토리에 id_buffer_pool 이라는 이름으로 파일이 생성되고 버퍼 풀의 크기가 아무리 크더라도 몇십 MB 이하인데, 이는 innodb 스토리지 엔진이 LRU 리스트에서 적재된 데이터 페이지의 메타 정보만 가져와서 저장하기 떄문인다.
    • 그리하여 버퍼풀의 백업은 매우 빠르지만, 버퍼 풀로 복구 하는 작업은 크기에 따라 시간이 소요 될 수 있다.
      • 백업된 내용에서 각 테이블 데이터를 다시 디스크에서 읽어와야 하기때문.
      • 복구 하는 과정을 보여주는 상태값을 제공하기도 함.
      • 중간에 멈출 수 있음.(추천하지 않음)
  • 버퍼 풀의 적재 내용 확인
    • 5.6버전 부터 버퍼풀의 메모리를 확인할 수 있었다.
    • 버퍼풀이 큰 경우에 테이블 조회가 상당히 큰 부하를 일으키는 문제가 있어
    • 8.0 부터 이러한 문제를 해결하기위해, infomation_schema 데이터베이스에 innodb_cached_indexes 테이블이 추가됨.
  • Double Write Buffer
    • 리두로그의 공간 낭비를 막기 위해 변경된 내용만 기록하는데, innodb 스토리지 엔진에서 더티 페이지를 플러시 할 떄 일부분만 기록되는 문제가 발생하면 그 페이지 내용을 복구 할 수 없을 수도있다.
    • 이를 방지가히기위해 double-write 기법을 이용한다
    • 파일을 기록하기전에 더티페이지를 묶어 DoubleWrite 버퍼에 기록 후, 더티 페이지를 랜덤으로 쓰기를 실행.
    • 페이지 기록중에 비정상 종료된다면 재시작할시 DoubleWirte 버퍼의 내용과 데이터 파일의 페이지를 모두 비교해서 다른 내용을 담고있는 페이지가 있으면 복사한다.이는 시스템 변수로 제어할 수 있다.
728x90

댓글