Loading...
MySQL 9.5 Reference Manual 9.5의 17.5.3 Adaptive Hash Index의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Adaptive hash index는 적절한 workload 조합과 버퍼 풀에 충분한 메모리가 있는 시스템에서, 트랜잭션 기능이나 신뢰성을 희생하지 않고도 InnoDB가 인메모리 데이터베이스처럼 동작할 수 있게 해 줍니다. Adaptive hash index는 innodb_adaptive_hash_index variable로 비활성화되며, --innodb-adaptive-hash-index 옵션을 사용하여 서버 시작 시 활성화할 수 있습니다.
관찰된 검색 패턴을 기반으로, 인덱스 키의 prefix를 사용하여 해시 인덱스가 구축됩니다. 이 prefix는 임의의 길이가 될 수 있으며, B-tree에 있는 값 중 일부만 해시 인덱스에 포함될 수 있습니다. 해시 인덱스는 자주 접근되는 인덱스 페이지에 대해 필요 시(on demand) 구축됩니다.
테이블이 거의 전부 메인 메모리에 들어가는 경우, 해시 인덱스는 어떤 요소라도 직접 조회할 수 있도록 하여, 인덱스 값을 일종의 포인터로 바꿈으로써 쿼리를 가속화합니다. InnoDB에는 인덱스 검색을 모니터링하는 메커니즘이 있습니다. InnoDB가 해시 인덱스를 구축하는 것이 쿼리에 도움이 된다고 판단하면, 자동으로 해시 인덱스를 구축합니다.
일부 workload에서는 해시 인덱스 조회로 인한 속도 향상이 인덱스 조회를 모니터링하고 해시 인덱스 구조를 유지 관리하는 추가 작업보다 훨씬 클 수 있습니다. Adaptive hash index에 대한 접근은, 여러 동시 조인과 같은 고부하 workload 하에서는 때때로 경합의 원인이 될 수 있습니다. LIKE 연산자와 % 와일드카드를 사용하는 쿼리 또한 일반적으로 이득을 보지 못합니다.
Adaptive hash index의 이점을 얻지 못하는 workload의 경우, 이를 끄면 불필요한 성능 오버헤드를 줄일 수 있습니다. 특정 시스템과 workload에 adaptive hash index가 적합한지 사전에 예측하기 어렵기 때문에, 이를 켠 경우와 끈 경우 모두에 대해 벤치마크를 실행하는 것을 고려해야 합니다.
Adaptive hash index 기능은 파티셔닝되어 있습니다. 각 인덱스는 특정 파티션에 바인딩되며, 각 파티션은 별도의 래치에 의해 보호됩니다. 파티셔닝은 innodb_adaptive_hash_index_parts variable에 의해 제어됩니다. innodb_adaptive_hash_index_parts variable의 기본값은 8이며, 최대 설정값은 512입니다.
SHOW ENGINE INNODB STATUS](https://dev.mysql.com/doc/refman/9.5/en/show-engine.html "15.7.7.17 SHOW ENGINE Statement") output의 SEMAPHORES 섹션에서 adaptive hash index의 사용 현황과 경합을 모니터링할 수 있습니다. btr0sea.c에서 생성된 rw-latch를 대기하는 thread가 많다면, adaptive hash index 파티션 수를 늘리거나 adaptive hash index를 비활성화하는 것을 고려하십시오.
해시 인덱스의 성능 특성에 대한 정보는 Section 10.3.9, “Comparison of B-Tree and Hash Indexes”를 참조하십시오.
17.5.2 Change Buffer
17.5.4 Log Buffer