In-memory optimized table 사용되는 Hash Index

 

·         Version : SQL Server 2014 later

 

SQL Server에서 새롭게 추가된 Hash Index(해시 인덱스)  In-Memory optimized table(인메모리 최적화 테이블)에서 사용된다기본적으로 테이블의 행을 빠르게 찾고 읽으려면 인덱스가 필요하다.

해시 인덱스는 버킷의 컬렉션은 배열(Array) 구성된다해시 함수는 인덱스 키를 해시 인덱스의 해당 버킷으로 매핑한다아래 그림은  개의 인덱스가 해시 함수를 사용하여 해시 인덱스에 있는  개의 서로 다른 버킷에 매핑되는것을 나타낸다아래 그림에서 해시 함수 이름은 f(x)이다.

 


해시 인덱스에 사용되는 해시 함수의 특징은 아래와 같다.

·         SQL Server에는 모든 해시 인덱스에 사용되는 하나의 해시 함수가 있다.

·         해시 함수는 결정적이다동일한 인덱스 키는 항상 해시 인덱스의 동일한 버킷에 매핑된다.

·         여러 인덱스 키는 동일한 해시 버킷에 매핑할  있다.

·         해시 함수는 균형을 이룬다해시 버킷에 대한 인덱스 키값의 분포는 일반적으로 포아송 분포를 따른다.

 

포아송 분포는 균등한 분포가 아니다인덱스  값은 해시 버킷에 균등하게 분포되지 않는다예를 들어 n개의 해시 버킷에 대한 n개의 고유인덱스 키의 포아송 분포는 버킷을 대략적으로 삼등분 한다삼등분된 버킷 부분에는 공백하나의 인덱스  개의 인덱스 키가 각각 포함된다소수의 버킷에  개이상의 키가 포함된다두개의 인덱스 키가 동일한 해시 버킷에 매핑되면 해시 충돌(Collision) 발생한다 많은 숫자의 해시 충돌은 읽기 작업의 성능에 영향을 준다.

 

인메모리 해시 인덱스 구조는 메모리 포인터의 배열로 구성된다 버킷은  배열의 오프셋에 매핑된다배열의  버킷은 해당 해시 버킷의  번째 행을 가리킨다버킷의  행은  다음 행을 가리키기 때문에 다음 그림과 같이  해시 버킷에 대한  체인이 만들어 진다아래 그림은 행이 포함된  개의 버킷이 있다.

 


 위에서 두번째 버킷에는  개의 빨간색 행이 포함된다 번째 버킷에는 하나의 파란색 행이 포함된다 아래 버킷에는  개의 녹색 행이 포함된다이러한 행동은 동일한 행의 서로 다른 버전일  있다.

 

 

[참고자료]

https://docs.microsoft.com/en-us/sql/database-engine/hash-indexes?view=sql-server-2014

 

 

2018-08-29 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, MSSQL, Hash Index, 해시 인덱스인모메리 최적화 테이블, In-memory optimized table



출처: https://sqlmvp.tistory.com/1269?category=618825 [Database Lab]
No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 41794
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 22519
2154 SQL Server 가용성 그룹에 데이터베이스 자동으로 추가하기 jevida(강성욱) 2019.03.26 714
2153 SQL Server MySQL PostgreSQL 비교 jevida(강성욱) 2019.03.26 1206
2152 SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout jevida(강성욱) 2019.03.26 796
2151 SQL Server 2019 에서 문자열 잘림에 대한 향상된 에러 메시지 반환 jevida(강성욱) 2019.03.26 602
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 624
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 936
2148 SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 527
2147 SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 552
» In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 484
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 469
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 503
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 446
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 696
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 390
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 483
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 445
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 564
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 604
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 465
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 632





XE Login