Bitmap 비트맵 인덱스와 일반 B-Tree 인덱스 잠금 비교

10048 단어 oracle 독서 노트
Bitmap 비트맵 인덱스와 일반 B-Tree 인덱스 잠금 비교
Bitmap 비트맵 인덱스가 일반적인 B-Tree 인덱스 잠금에 비해 "많은 비용"을 지불하는지 확인하려면 다음 실험을 수행합니다.비트맵 인덱스는'비트맵 세그먼트 레벨 잠금'을 가져올 수 있으므로 실제 사용 과정은 반드시 서로 다른 인덱스가 가져오는 잠금 대가 상황을 충분히 이해해야 한다.
1. 차이점을 비교하기 위해 두 가지 색인 유형의 테스트표를 만든다
1) 표 tbitmap에서 비트맵 인덱스 만들기
SYS@ORA11GR2>create table t_bitmap (id number (10),name varchar2(10),sex varchar2(1));

Table created.

SYS@ORA11GR2>create bitmap index t_bitmap_idx on t_bitmap(sex);

Index created.

2) 표 tbtree에서 일반 B-Tree 인덱스 만들기
SYS@ORA11GR2>create table t_btree (id number(10),name varchar2(10),sex varchar2(1));

Table created.

SYS@ORA11GR2>create index t_btree_idx on t_btree(sex);

Index created.

2. 표마다 두 개의 데이터를 초기화
1) 데이터 초기화 tbitmap 테이블 데이터
SYS@ORA11GR2>insert into t_bitmap values(1,'WANG','M');

1 row created.

SYS@ORA11GR2>insert into t_bitmap values(2,'chen','F');

1 row created.

2) 데이터 초기화 tbtree 테이블 데이터
SYS@ORA11GR2>insert into t_btree values(1,'WANG','M');

1 row created.

SYS@ORA11GR2>insert into t_btree values(2,'chen','F');

1 row created.

SYS@ORA11GR2>commit;

Commit complete.

3) 초기화 후 결과 보기
SYS@ORA11GR2>select * from t_bitmap;

        ID NAME       S
---------- ---------- -
         1 WANG       M
         2 chen       F



SYS@ORA11GR2>select * from t_btree;

        ID NAME       S
---------- ---------- -
         1 WANG       M
         2 chen       F

3. 서로 다른 세션 중 에 대한 일반 B-Tree 색인 표 tbtree'보이'데이터 삽입, 수정 및 삭제
첫 번째 세션에 삽입된 후 제출하지 마십시오
SYS@ORA11GR2>insert into t_btree values (3,'ANDY','M');

1 row created.

두 번째session에 같은 상태 데이터를 삽입하면 삽입, 수정, 삭제가 모두 성공적으로 완료되었음을 알 수 있습니다!
SYS@ORA11GR2>insert into t_btree values(4,'tut','M');

1 row created.

SYS@ORA11GR2>update t_btree set sex='M' where id=2;

1 row updated.

4. Bitmap 비트맵 인덱스 테이블 t 가 있는 서로 다른 세션bitmap '보이' 데이터 삽입, 수정, 삭제
1) 첫 번째 세션 삽입 후 제출하지 않기
SYS@ORA11GR2>insert into t_bitmap values(3,'ANDY','M');

1 row created.

2) 두 번째session에서 남자아이의 데이터를 처리하면 조작 정보에 있는 그림의 색인열과 관련된 삽입, 수정, 삭제만 하면 완성할 수 없음을 알 수 있습니다!!
(1) 삽입 테스트는 삽입 데이터가 비트맵 인덱스 열'sex'필드와 관련이 있을 때 완성할 수 없습니다.
SYS@ORA11GR2>insert into t_bitmap values(4,'tut','M');

문제가 생겼다.'자물쇠 대기'가 정체되어 움직이지 않는 현상이 나타났다!
삽입된 데이터가 비트맵 인덱스 열'sex'필드와 관련이 없을 때 완성할 수 있습니다.
SYS@ORA11GR2>insert into t_bitmap(id,name) values(4,'tut');

1 row created.

SYS@ORA11GR2>commit;

Commit complete.

(2) 테스트를 업데이트할 때 두 번째 세션의 테스트 데이터는 다음과 같습니다.
비트맵 인덱스 열 'sex' 필드의 값이 'M' 이면 완성할 수 없습니다.이때 성공한 것은 첫 번째 줄 데이터의 sex 값 자체가 'M'이기 때문이다.
SYS@ORA11GR2>update t_bitmap set sex='M' where id=1;

1 row updated.

SYS@ORA11GR2>update t_bitmap set sex='M' where id=2;

문제가 생겼다.'자물쇠 대기'가 정체되어 움직이지 않는 현상이 나타났다!
SYS@ORA11GR2>update t_bitmap set sex='M' where id=4

문제가 생겼다.'자물쇠 대기'가 정체되어 움직이지 않는 현상이 나타났다!
또한 업데이트된 열이 비트맵 인덱스에 대응하는 열이 아니라면 비트맵 세그먼트 인덱스 잠금의 제한을 받지 않습니다.
아래와 같다.
SYS@ORA11GR2>update t_bitmap set name='xu' where id=2;

1 row updated.

SYS@ORA11GR2>select * from t_bitmap;

        ID NAME       S
---------- ---------- -
         1 WANG       M
         2 xu          F
         4 tut

(3) 삭제 테스트
SYS@ORA11GR2>delete from t_bitmap where id=1;

'자물쇠 대기'가 정체되어 움직이지 않는 현상이 나타났다!
SYS@ORA11GR2>delete from t_bitmap;

문제가 생겼다.'자물쇠 대기'가 정체되어 움직이지 않는 현상이 나타났다!
요약:
  • B-Tree 인덱스에 있어 삽입 동작은 다른 세션의 DML 작업에 영향을 주지 않는다.그러나 비트맵 인덱스의 경우 인덱스 세그먼트 레벨 잠금이기 때문에 작업 열 값과 관련된 내용이 잠길 수 있습니다. (글에서 언급한 "M"정보)
  • 상기 현상이 발생한 원인: 비트맵 인덱스는 압축된 인덱스 값으로 저장되고 그 안에 한 범위 내의 ROWID가 포함되어 있기 때문에 ORACLE는 주어진 값에 대해 모든 범위 내의 ROWID를 잠가야 하며 줄 단계의 잠금은 지원되지 않는다.다른 설명 방법: 비트맵 인덱스를 사용할 때 한 키가 여러 줄(수백 수천 줄)을 가리키며 비트맵 인덱스 키를 업데이트하면 다른 줄이 대응하는 비트맵 인덱스 필드를 잠그는 것입니다!
  • bitmap 인덱스의 장점에 비해: 비트맵은 압축 형식으로 저장되기 때문에 B-Tree 인덱스보다 디스크 공간이 훨씬 적다
  • bitmap 인덱스에 비해 단점이 있다. 이런 잠금의 대가가 높아서 일부 DML 문장에'잠금 대기'가 나타나 삽입, 업데이트와 삭제의 효율에 심각한 영향을 주고 높은 병발 시스템에 적용되지 않는다.
  • 비트맵 인덱스 사용 원칙: 비트맵 인덱스는 주로 의사결정 지원 시스템이나 정적 데이터에 사용되며 인덱스 줄 잠금은 지원되지 않는다.

  • 비트맵 인덱스는 낮은 cardinality 열에 사용하는 것이 좋습니다. 예를 들어 위의 '성별' 열은 'M', 'F' 두 가지가 있습니다.이 기본 원칙을 토대로 비트맵 인덱스를 포함하는 표의 조작 특징을 진지하게 고려해야 한다. 만약에 병렬 조작이 높은 시스템이라면 비트맵 인덱스를 사용하기에 적합하지 않다!
    비트맵 인덱스와 일반 B-Tree 인덱스 자물쇠의 비교

    좋은 웹페이지 즐겨찾기