Hax0r

Adaptive Hash Index 본문

0x00 개발/Database

Adaptive Hash Index

영준이 2017.06.26 22:45

Overview

RDBMS에서 대부분의 경우 일반적으로 사용되는 자료 구조는 B-Tree 입니다.

Primary Key 순으로 정렬하여 관리하고 Secondrary Key는 인덱스키 + PK를 조합하여 정렬하고있습니다.

데이터의 사이즈가 커져도 특정 데이터 접근에 소요되는 비용이 크게 증가되지 않기 때문입니다.

또 노드의 삽입, 삭제 후 에도 균형 트리 유지로 균등한 응답속도 보장하고 효율적인 알고리즘 제공합니다.

PK로 접근 시 데이터 접근에 소요되는 비용은 O(logN)이고,

두번째 트리에 접근하는 Secondrary Key에 소요되는 비용은 2 * O(logN)입니다.


단점도 존재하는데, 삽입과 삭제시 트리의 균형을 유지하기 위해 복잡한 연산(재분배,합병)이 필요

(½일 때 분열이 일어남, 2/3일 때 분열이 되는 B*TREE 활용)합니다.


또한 Mutex Lock이 과도하게 생성되면 적은 데이터 셋에도 자원 사용 효율이 감소하게 됩니다.
자주 사용되는 데이터 탐색에도 불구하고 매번 트리의 경로를 쫓아가야 한다는 애로사항이 있습니다.

이와 같은 애로 사항 때문에 퍼포먼스를 최대로 발휘하지 못 하는 경우가 많습니다.

이에 대한 해결책으로InnoDB에는 Adaptive Hash Index 를 지원합니다.
InnoDB Adaptive Hash Index는 B-Tree의 한계를 보완할 수 있는 좋은 기능입니다.







Adaptive Hash Index ?



The adaptive hash index (AHI) lets InnoDB perform more like an in-memory database on systems with appropriate combinations of workload and ample memory for the buffer pool, without sacrificing any transactional features or reliability



Adaptive Hash Index 는 자주 사용되는 칼럼을 해시로 정의합니다.
B-Tree를 이용하지 않고 다이렉트로 데이터에 접근할 수 있는 기능인 것 입니다.


모든 값을 해시로 생성하는 것이 아닌, 자주 사용되는 데이터 값만 내부 알고리즘을 통해 해시 값을 생성합니다.

장점을 얘기해봤으니 단점도 알아봅시다.


Adaptive Hash Index는 사용되는 데이터를 내부 알고리즘이 판단하여 해시 키를 생성하기 때문에 제어가 어렵습니다.

오랫동안 사용되지않은 테이블이라도 기존 해시 자료 구조가 남아있기 때문에 테이블 drop 시 영향을 줄 수 있습니다.







설정을 enable 하고자 한다면 아래 명령어를 참고하시면 됩니다.

(innodb_adaptive_hash_index 파라미터는 InnoDB Plugin 1.0.3 부터 동적으로 Global 변수를 변경 가능합니다.)




set global innodb_adaptive_hash_index = 1;


반대로 설정을 disable 하고자 한다면 아래 명령어를 참고하면 됩니다.


set global innodb_adaptive_hash_index = 0;



설정 값을 보고자 한다면 아래의 명령어를 참고하면 됩니다.



show variables like '%adaptive%';



# 아래 정보는 저의 환경에서 실행한 결과 값 입니다.

'innodb_adaptive_flushing', 'ON'

'innodb_adaptive_flushing_lwm', '10'

'innodb_adaptive_hash_index', 'ON'

'innodb_adaptive_max_sleep_delay', '150000'


통계 정보는 아래 명령어를 통해 참고 할 수 있습니다.



show global status like 'Innodb_adaptive_hash%';



Reference


0 Comments
댓글쓰기 폼