2008년 02월 06일
[펌] row migration/chaining
[펌] SEGMENTS 란?
From : http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/what_is_table.html
row migration/chaining
테이블 관련 정보 확인 뷰

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이 발생한다.
| 구분 | migration | chaining |
|---|---|---|
| 정의 | update로 인하여 늘어나는 공간을 저장할 공간이 없어서 다른 블럭으로 row를 옮기는 현상 | 하나의 row를 하나의 블럭에 저장할 수 없어서 여러 블럭에 걸쳐서 저장하는 현상 |
| 특징 | 기존 블럭에는 migration되는 데이터의 row header와 블럭 주소값을 갖게되고, 새로운 블럭에는 migration되는 데이터가 저장됨 | initial row piece(행 조각)와 row pointer로 블럭 내에 저장 |
| 문제점 | migration된 row를 일기 전에 기존 블럭에서 헤더를 통해 migration된 row를 읽기 때문에 성능이 감소됨 | row의 정보를 검색하기 위해 하나 이상의 데이터 블럭을 scan해야 하기 때문에 성능이 감소 |
| 해결책 | •PCTFREE를 크게 설정 • 객체를 export하고 삭제한 후, import • 객체를 migration하고 truncate | • 블럭의 크기를 크게 설정 |
| alter table | parameter에 대한 할당을 할 수 있다. |
| alter table .. allocate extent | extent 할당을 위한 alter table 명령어 |
| truncate table | 테이블의 모든 데이터를 삭제하고 데이터가 차지하고 있던 기억공간을 해제한다. |
| drop table | 테이블을 삭제하는 명령으로 데이터와 기억공간, 구조 모두를 삭제한다. |
| analyze table | 테이블의 구조에 대한 분석을 할 수 있으며, 테이블에 대한 통계자료를 얻을 수 있다. |
테이블 관련 정보 확인 뷰
| dba_segments | segment의 정보 |
| dba_objects | object의 정보 |
| dba_tables | table의 정보 |
| dba_extents | extent의 정보 |
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- [Oracle] varchar2 type by 지원
- 테이블 생성 by 바보나무
- [Oracle] MERGE by 지원
- [Oracle] INSERT 행 삽입 by 지원
- [STL] 내가 생각하는 vector / deque / list의 구조 by 용식불패
# by | 2008/02/06 12:42 | Oracle | 트랙백



