책너두 6기 12일차

백은빈, 이성욱의 Real MySQL8.0 1권 p.130 ~ p.141

내용정리

04 아키텍처

4.2.11 리두 로그 및 로그 버퍼

  • 리두 로그(Redo Log)는 트랜잭션의 4가지 요소인 ACID 중에서 D(Durable)에 해당하는 영속성과 가장 밀접하게 연관돼 있다.
  • 리두 로그는 서버가 비정상적으로 종료됐을 때 데이터 파일에 기록되지 못한 데이터를 잃지 안헥 해주는 안전장치다.
  • 대부분 데이터베이스 서버는 데이터 변경 내용을 로그로 먼저 기록한다.
  • 데이터베이스 서버에서 리두 로그는 트랜잭션이 커밋되면 즉시 디스크로 기록되도록 시스테 변수를 설정하는 것을 권장한다.
  • innodb_flush_log_at_trx_commit 시스템 변수이다.

ACID는 데이터베이스에서 트랜잭션의 무결성을 보장하기 위해 꼭 필요한 4가지 요소(기능)을 의미한다.

A : Atomic, 트랜잭션은 원자성 작업이어야 한다.

C : Consistent, 일관성

I : Isolated, 격리성

D : Durable, 한 번 저장된 데이터는 지속적으로 유지되야 한다.

4.2.11.1 리두 로그 아카이빙
  • innodb_redo_log_archive_dirs 시스템 변수로 경로 설정
  • innodb_redo_log_archive_start UDF(User Defined Function, 사용자 정의 함수)를 실행한다.
4.2.11.2 리두 로그 활성화 및 비활성화
  • MySQL 서버에서 트랜잭션이 커밋돼도 데이터 파일은 즉시 디스크로 동기화되지 않는 반면, 리두 로그(트랜잭션 로그)는 항상 디스크로 기록된다.
  • alter instance {enable / disable} innodb redo_log 명령을 실행한 후 innodb_Redo_log_enalbed 상태를 확인해보자.

4.2.12 어댑티브 해시 인덱스

어댑티브 해시 인덱스(Adaptive Hash Index)는 사용자가 수동으로 생성하는 인덱스가 아니라 InnoDB 스토리지 엔진에서 사용자가 자주 요청하는 데이터에 대해 자동으로 생성하는 인덱스이다. 해시 인덱스이기 때문에 B-Tree 검색 시간을 줄여준다. ‘인덱스 키 값’과 키 값이 저장된 ‘데이터 페이지 주소’의 쌍으로 관리된다. 인덱스 키 값은 ‘B-Tree 인덱스의 고유번호(id)와 B-Tree 인덱스의 실제 키 값’ 조합으로 생성된다.

어댑티브 해시 인덱스를 활성화하면 초당 쿼리 처리 수를 비교적 적은 CPU 사용으로 처리할 수 있다. 하지만 의도적으로 비활성화 하는 경우도 있는데 다음처럼 성능 향상에 크게 도움이 되지 않는 경우다.

  • 디스크 읽기가 많은 경우
  • 특정 패퉌의 쿼리가 많은 경우(조인이나 LIKE 패턴 검색)
  • 매우 큰 데이터를 가진 테이블의 레코드를 폭넓게 읽는 경우

아래와 같은 상황에는 성능 향상에 도움이 많이 된다.

  • 디스크의 데이터가 InnoDB 버퍼 풀 크기와 비슷한 경우(디스크 읽기가 많지 않은 경우)
  • 동등 조건 검색(동등 비교와 in 연산자)가 많은 경우
  • 쿼리가 데이터 중에서 일부 데이터에만 집중되는 경우

읽고 나서

Adaptive hash index는 좋은 기능이지만 정말 도움이 되는 경우인지 확인하고 사용하자.