[펌] row migration/chaining

[펌] SEGMENTS 란?

From : http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/what_is_table.html

row migration/chaining

테이블에 대해 잦은 insert와 update가 발생하면 row migration이라고 하는 행 이전이 발생하거나 row chaining이 발생한다.
만약 기존의 블럭에 저장된 6개 크기의 데이터가 보다 큰 공간을 필요로 하는 14개 크기의 데이터로 ipdate돼야 한다면
기존 블럭에서는 필요한 공간이 부족하므로 갱신된 데이터가 저장될 수 없다. 이럴 경우, 갱신된 데이터를 포함하는 전체 row가필요한 공간이 제공될 수 있는 다른 블럭으로 옮겨서 저장되어 지며, 기존 블럭의 예전 저장 위치의 row header에 옮겨간다른 새로운 블록의 위치 정보를 남기게 된다.
이러한 row 전체가 다른 블럭으로 옮겨 가면서 이전의 위치에 이전한 위치의 정보를 남기는 현상을 row migration이라고 한다.

다른 의미로 기존의 블럭에 16개의 row를 삽입하려고 하는데 PCTUSED와 사용 가능한 공간이 다 차고 3개의 블럭이 더 이상 삽입할 수 없게 되는 경우가 있다. 이럴 경우 새로운 블럭으로 row chaining이 발생한다.

구분migrationchaining
정의update로 인하여 늘어나는 공간을 저장할 공간이 없어서 다른 블럭으로 row를 옮기는 현상하나의 row를 하나의 블럭에 저장할 수 없어서 여러 블럭에 걸쳐서 저장하는 현상
특징기존 블럭에는 migration되는 데이터의 row header와 블럭 주소값을 갖게되고, 새로운 블럭에는 migration되는 데이터가 저장됨initial row piece(행 조각)와 row pointer로 블럭 내에 저장
문제점migration된 row를 일기 전에 기존 블럭에서 헤더를 통해 migration된 row를 읽기 때문에 성능이 감소됨row의 정보를 검색하기 위해 하나 이상의 데이터 블럭을 scan해야 하기 때문에 성능이 감소
해결책•PCTFREE를 크게 설정
• 객체를 export하고 삭제한 후, import
• 객체를 migration하고 truncate
• 블럭의 크기를 크게 설정
migration과 chaining의 비교

alter tableparameter에 대한 할당을 할 수 있다.
alter table .. allocate extentextent 할당을 위한 alter table 명령어
truncate table테이블의 모든 데이터를 삭제하고 데이터가 차지하고 있던 기억공간을 해제한다.
drop table테이블을 삭제하는 명령으로 데이터와 기억공간, 구조 모두를 삭제한다.
analyze table테이블의 구조에 대한 분석을 할 수 있으며, 테이블에 대한 통계자료를 얻을 수 있다.

테이블 관련 정보 확인 뷰

dba_segmentssegment의 정보
dba_objectsobject의 정보
dba_tablestable의 정보
dba_extentsextent의 정보


이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 오서비네 | 2008/02/06 12:42 | Oracle | 트랙백

<< 이전 페이지     다음 페이지 >>