PPT
튜닝을 하다 보면 적절한 인덱스는 없고 그렇다고 해서 인덱스를 추가하거나 순서를 바꾸게 되면 다른 SQL에 많은 영향이 발생할 수 있는데 이럴때 INDEX FAST FULL SCAN이 발생한다
인덱스 블럭의 분할
인덱스 로우는 정렬이 되어 저장되어야 하기 때문에 이미 생성된 구조에 새로운 로우가 삽입되면 기존의 위치에 insert되는 문제 발생
Reverse Key
위의 그림에서는 index를 구성할 column인 empno의 key value에 대해 reverse 구성을 한뒤 b-tree 인덱스의 형태로 인덱스를 구성하고 있다.
위의 테이블을 보면 순차적이었던 숫자들이 reverse되면서 뒤죽박죽으로 변했다. 그리고 이러한 key value들은 정렬되어 leaf block에 자리잡는다. 그렇기 때문에 기존의 b-tree에서 순차적으로 leaf block 에 들어가야 할 key value 들이 여러 leaf-block에 분산되는 것을 확인 할 수 있다.
왜 분산을 시킬까?
경합을 막기 위해서다.일반적인 b-tree구조의 경우 만일 해당 column에 sequencial한 데이터들이 대량으로 isert / update 가 발생하게 되면 보통 새로들어오는 작업에 대해 좌측의 leaf block 위주로 인덱스의 modification(즉 index spilit) 작업이 발생하게 된다. 이러한 경우 insert 또는 update 되는 블록에 대해서 lock이 발생하게 되는데, 이 때 다른 유저가 이 블록에 해당하는 data에 접근(마찬가지의 insert / update 작업) 하고자 한다면 대기가 생기게 된다. 하지만 reverse key index의 경우 분산을 시킴으로써 경합이 생길 확률을 줄여주게 된다.
* Reverse keyindex의 특징
•특정 leaf block 단위에만 집중되는 인덱스의 수정이 많이 일어나 성능이 저하되는 것을 회피
(column에 대해 순차적인 value의 insert 나 update가 여러곳에서 일어날 경우 경합이 발생된다 이런것을 예방)
•insertion 시 인덱스에서 leaf key value가 다른 블록들로 모두 고루 분포된다.
•reverse key 배열은 range scan을 할수 없다. (key value 가 reverse 된 채로 정렬되기 때문에 기존에 같은 범위에 있던 key value들이 분산되어버림)
대신 fetch-by-key 또는 full-table scan이 가능하다.
'스터디북' 카테고리의 다른 글
<10/27> 지독하게 (0) | 2015.10.27 |
---|---|
<10/26> 한걸음 한걸음 꾸준히 (0) | 2015.10.26 |
<10/24> This Love (0) | 2015.10.24 |
[10/23] index leaf node에서 split이 발생하는 경우 (0) | 2015.10.23 |
<10/23> 그땐 그땐 그땐 (0) | 2015.10.23 |