책너두 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_startUDF(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는 좋은 기능이지만 정말 도움이 되는 경우인지 확인하고 사용하자.