탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
75
작성한 질문수 10
커버링 인덱스가 아니라고 가정한다면 클러스터링 인덱스까지 2번의 B+Tree 탐색을 하지만
커버링 인덱스라면 이런 탐색을 한번 줄여 발생하는 IO 작업을 최적화 하는것으로 이해 했습니다
커버링 인덱스 말고도, 자주 사용되는 페이지의 위치를 자동으로 InnoDB에서 어댑티브 해시 인덱스라는 공간에 저장 하는것으로 알고 있는데 이 방식도 IO 작업을 최적화 하는 것인지 궁금 합니다
답변 2
1
안녕하세요. ggg7515님
어댑티브 해시 인덱스(AHI)도 탐색을 줄이는 건 맞지만, 절약하는 비용의 종류가 커버링 인덱스와 다릅니다.
커버링 인덱스는 세컨더리 인덱스 → 클러스터링 인덱스로 가는 추가 탐색 자체를 없앱니다. 접근할 페이지 수가 줄어들기 때문에, 해당 페이지가 버퍼 풀에 없다면 디스크 I/O까지 실제로 줄어듭니다.
반면 AHI는 버퍼 풀에 이미 올라와 있는 페이지에 대해서만 동작합니다. 자주 조회되는 키 값 → 버퍼 풀 내 레코드 위치를 해시로 매핑해두고, 루트 → 브랜치 → 리프로 내려가는 B+Tree 탐색을 건너뛰게 해줍니다. 즉 절약되는 건 메모리 안에서의 트리 탐색 비용(CPU)이지 디스크 I/O가 아닙니다. 페이지가 버퍼 풀에 없으면 어차피 디스크에서 읽어야 하고, 이 경우 AHI는 도움이 되지 않습니다.
정리하면 커버링 인덱스는 I/O 최적화, AHI는 CPU 최적화입니다.
그리고 한 가지 중요한 점은, MySQL 8.4부터 AHI가 기본 비활성화로 바뀌었다는 것입니다. 현대 워크로드에서는 이점보다 경합, 유지 비용이 더 큰 경우가 많다는 판단이 반영된 변경입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
ggg7515님께서 질문하신 내용은 데이터베이스의 인덱스 최적화 방법 중 어댑티브 해시 인덱스에 관한 것입니다. 어댑티브 해시 인덱스는 InnoDB 기반의 MySQL에서 사용하는 최적화 기법으로, 자주 접근하는 데이터 페이지의 주소를 캐싱하여 더 빠르게 접근할 수 있도록 돕습니다. 이는 IO 작업을 최적화하는 데 유리하게 작용하며, 커버링 인덱스가 아닌 경우에도 작업 효율을 높일 수 있습니다.
어댑티브 해시 인덱스는 메모리에 저장되며, 반복적으로 조회되는 데이터 페이지의 어드레스를 해시 테이블에 기록하여 빠르게 접근합니다. 이 과정에서 B+Tree보다 더 빠르게 페이지를 찾아 데이터를 가져올 수 있게 합니다. 따라서, 커버링 인덱스와는 다른 방식으로 작동하지만, 결과적으로 물리적인 IO 작업을 줄여 성능을 최적화하는 효과를 가집니다.
관련해서 더 많은 정보를 찾고자 한다면, 아래의 가이드와 게시글을 참고할 수 있습니다:
- 실무(OLTP 환경)에서는 강의에서 알려주신 오프셋 페이징을 쓰면 안되는거 맞을까요?
- 데이터베이스의 페이징 및 인덱스 관련 최적화 방법에 대해 많은 논의가 이루어진 게시글입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
3-13 리텐션 과제 제출합니다
0
4
1
부하 테스트 시 설정 관련 질문드립니다
1
14
1
build 시 에러 해결방법 공유(docker.desktop 업데이트 -> 의존성 버전 수정)
0
16
1
실습 데이터(PostgreSQL 백업 파일) 관련하여 문의드립니다. (Hive 환경 실습)
0
14
2
sakila 실전 17번 문제
0
15
1
수강 완료한 강의 수료증 어떻게 받나요?
0
21
1
복합인덱스 설계 질문
0
46
1
app logs 데이터로 쿼리 연습
0
30
2
ArticleReadService 관련 질문
0
27
1
마스터패스...
0
37
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
67
1
[과제] 연습문제 쿼리 작성했습니다!
0
29
2
SubStack 신청 완료했습니다!
0
22
2
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
47
1
실습소 페이지
0
38
3
노드
0
35
1
57번
0
30
1
이진 트리 노드
0
51
1
통계정보 갱신 질문
0
69
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
77
2
컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
0
70
2
실습데이터 ORDERS 생성 시간 질문요...
0
102
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
73
1
Postgresql 아키텍처 업데이트
1
91
2





