본문 바로가기
공부/Mysql

[RealMysql 8.0]04아키텍처 4.2.10 ~ 4.2.11.0

by 띵커베르 2023. 2. 1.
728x90
  • 체인지 버퍼
    • RDMBS에서 레코드가 insert, update 시 파일변경과 인덱스 업데이트 작업도 필요한데, 이는 디스크를 랜덤하게 읽는 작업을 요한다.
    • 이러한 랜덤읽기는 많은 자원을 소모하게되어, Innodb는 버퍼 풀에 인덱스가 있다면 즉시 업데이트를 수행하지만 그렇지 않다면 즉시 실행하지 않고 임시 공간에 저장해 두고 사용자에게 결과를 반환하는 형태로 성능을 향상시킨다.
    • 이때 사용하는 임시 메모리 공간을 체인지 버퍼 라고 한다
    • 사용자에게 결과를 전달하기 전에 반드시 중복 여부를 체크해야하는 유니크 인덱스체인지 버퍼를 사용할 수 없다.
    • 체인지 mysql 임시로 저장된 레코드 조각은 백그라운드 스레드에 의해 병합되는데 이를 버퍼 머지 스레드 라고 한다.
  • 리두 로그 및 로그 버퍼
    • 리두로그는 트랜잭션의 4가지 요소인 ACID 중에서 D(Durable)에 해당하는 영속성과 가장 밀접하게 연관돼 있다.
 

mysql 트랜잭션 ACID

트랜잭션 데이터베이스의 상태를 변경하는 여러개의 작업을 단위로 묶어서 처리하는 것. 이러한 트랜잭션은 ACID 의 성질에 만족해야 한다 트랜잭션이 시작되면 전체 트랜잭션이 완료될 때까지

jeong0427.tistory.com

  • mysql 서버를 포함한 대부분 데이터베이스는 데이터 변경 내용을 로그로 먼저 기록하고, 데이터 파일은 쓰기보다 읽기 성능을 고려한 자료구조를 가지고 있어 이를 보완할  쓰기 성능이 낮은 자료 구조를 가진 리두로그를 가지고 있다.
  • mysql 서버가 비정상 종료되는 경우 innodb 스토리지 엔진의 데이터 파일은 2가지 종류의 일관되지 않은 데이터를 가질 수 있다
    • 커밋됐지만 데이터 파일을 기록되지 않은 데이터
      • 리두 로그에 저장된 데이터를 데이터 파일에 다시 복사하기만 하면된다.
    • 롤백됐지만 데이터 파일에 이미 기록된 데이터
      • 변경되기전 데이터를 담은 언두 로그 데이터를 데이터 파일에 복사하면된다.
      • 이때 리두로그는 변경이 커밋됐는지, 롤백됐는지, 트랜잭션 실행 중간 상태였는지 확인한다.
    • 데이터베이스 서버에 리두 로그는 트랜잭션이 커밋되면 즉시 디스크로 기록되는 시스템 변수를 설정하는 것을 권장한다.
    • 하지만 이는 많은 부하를 유발할 수 있기 때문에, 어느 주기로 디스크에 동기화 할지를 결정하는 시스템 변수를 제공한다.
728x90

댓글