달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 7. 23. 11:15

Transaction - Block Layer - ASSM DataBase이야기2010. 7. 23. 11:15

FLM - Free List Management
MFL - Master Free List
PFL - Process Free List
TFL - Transaction Free List
FLM은 MFL, PFL, TFL을 사용하여 프리블록을 관리하는 방식이며, 
FLM 방식에서 freelists가 1로 설정한 경우에는 PFL을 사용하지 않고 MFL과 TFL만을 사용하여 프리블록을 관리하는데 이 경우 여러 세션에서 Insert작업을 할 경우 MFL에 대한 경합이 발생하된다. 따라서 FREELISTS 값을 1보다 큰 수치로 변경하여 PFL의 개수를 증가시킬 필요가 있다. PFL을 사용할 경우 , PID값을 이용하여 PFL을 할당 받음으로써 프리리스트에 대한 경합을 줄일 수 있다.

ASSM - Automatic Segment Space Management
ASSM은 비트맵 블록을 이용하여 프리블록을 관리하는 방식이다. 

  FLM 방식에서 FREELISTS를 지정해주면 세션의 PID 별로 사용할 PEL을 구별해서 사용하게 됨을 확인하였다. 이로 인하여 동시 Insert세션들의 프리리스트의 경합을 줄일 수 있었다. 

SEGMENT_NAME         EXTENT_ID              FILE_ID      BLOCK_ID               BLOCKS                 
---------------------------------------------------------------------------------
ASSM_TEST                          0                      7                      9                      8                      

SEGMENT_NAME       HEADER_FILE     HEADER_BLOCK      BLOCKS                 
--------------------------------------------------------------------------------- -----------------
ASSM_TEST                       7                      11                     8                      

9,10블록에는 L1BMB, 2LBMB 블록이고 11블록이 L3BMB블록이면서 세그먼트 헤더이다. 따라서 데이터가 저장할 수 있는 첫 번째 블록은 12번 블록이다.

결합 인덱스의 브랜치 블록도 리프 블록으로의 경로를 판단할 수 있는 가장 짧은 prefix를 저장한다는 원리가 적용된다. 그렇다면 신규로 데이터가 입력될 때 브랜치 블록에 어떤 변화가 있는지 확인해 보도록 하자.
결합 인덱스에서는 식별하기 좋은 컬럼을 앞으로 하는것이 B-Tree구조의 레벨을 낮게 할 수 있다.

인덱스의 PCTFREE는 어떠한 의미를 가질까??
B-Tree 인덱스 구조에서는 인덱스에 대한 update가 발생할 수 없기 때문이다. B-Tree인덱스 구조에서는 키 값에 대한 변경을 delete & insert 방식으로 처리하기 때문이다.

테이블에 데이터 입력 후, 인덱스 생성 다시 데이터 입력 vs 인덱스 생성후 데이터 삽입에서 PCTFREE는 다르다.
첫번째 경우에는 기존의 데이터를 기준으로 인덱스를 생성한다. 인덱스를 생성시 PCTFREE는 연관이 없다. 그러므로 인덱스를 생성할 때 한 블록에 가득 채워서 생성하게 된다. 그 후 데이터를 삽입하게 된다면 인덱스는 Split가 될 것이다. (좋지 않은 구조를 가지게 됨)

두번째 경우에는 인덱스를 생성시 PCTFREE를 고려하여 생성하게 된다. 만일 PCTFREE를 40을 주었다면 , 3개의 값이 들어갈 수 있는 블록에 2개의 값을 넣고 나머지 공간은 비워두게 된다. 이렇게 된다면 첫번째 경우에 2개의 블록이 생성되었다면 이 경우에는 3개의 블록이 생성되게 된다. 하지만 중간 값이 들어오게 되면 블록에는 여유공간이 있으므로 Split하지 않고 정렬되기만 할 뿐이다.

그러므로 이 2개의 특징을 잘 파악하여 인덱스를 생성하여야 한다. 읽기 작업이 많은 테이블의 경우에는 데이터를 넣고 만들게 된다면 더 좋은 효율을 가진 인덱스가 만들어 질것이고, DML작업이 많은 경우에는 PCTFREE를 고려하여 인덱스를 먼저 생성한 후 DML작업을 한다면 더 좋은 효율을 가질 것이다.

인덱스를 리빌드하면 인덱스 클러스트링 팩터가 향상될까?
인덱스 클러스터링 팩터는 ' 인덱스의 키값의 정렬 순서와 해당 레코드가 테이블에 저장된 순서와 불일치 정도'를 수치화 한 것..
높을수록 안 좋은거..
테스트 결과, 인덱스 리빌드 작업은 인덱스 클러스터링 팩터를 향상시키지 못한다. 인덱스 클러스터링 팩터를 향상시키기 위한 방법은, 해당 인덱스의 키 칼럼의 순서로 테이블을 정렬하여 재생성하는 방법뿐이다.

IOT테이블 분석
쿼리에서 인덱스를 사용할 경우 데이터를 찾아내기 위해서 인덱스 스캔을 먼저 한 후에 데이터 블록에 대한 스캔작업이 먼저 일어난다. 그러나 IOT 테이블인 경우 인덱스와 테이블 데이터가 같이 저장되어 있으므로 인덱스 스캔 하나만으로 데이터에 대한 조회 작업이 가능하다.
IOT는 테이블 세그먼트가 존재하지 않으며 인덱스 세그먼트만 존재한다.



'DataBase이야기' 카테고리의 다른 글

MS SQL SERVER 2005 EXPRESSION  (0) 2011.07.20
Transaction - PGA Layer  (0) 2010.07.26
Transaction - Block layer  (0) 2010.07.22
Transaction-BlockLayer  (0) 2010.07.19
Transaction - Enqueue  (0) 2010.07.16
:
Posted by НooпeУ


Code Start Code End