Oracle

게시글 보기
작성자 유건데이타 등록일 2015-06-24
제목 ROW CHAINING 과 ROW MIGRATION
ROW CHAINING 과 ROW MIGRATION
=============================

Purpose
-------
Row chaining 과 Row Migration에 대해 이해하고 줄이는 방법을 확인한다.


Problem Description
-------------------
Row chaining 은 단일 테이블 상의 특정 Row의 길이가 증가해서 더 이상
동일한 데이타 블럭에 들어갈수 없을때 발생한다. 이때 RDBMS는 또
다른 데이타 블럭을 찾는다. 이 데이타 블럭은 원래 블럭과 연결되어
있다. 이 경우 데이타 블럭이 하나의 I/O 작업과 동일한 양을 수행하기
위해 두 개의 I/O를 사용해야 한다는 점이다. 이 상황은 여러분의
데이터베이스 성능을 빠르게 약화시킬 것이다.

Data Block상의 하나의 Row는 길이가 증가하면서 갱신되며, Block의
Freespace가 0%일 때, Row는 Migration을 일으킨다. 물론, 전체 Row가
들어갈 만한 크기의 새로운 Block에 Row에 대한 Data가 Migration된다.

이경우 ORACLE은 Row에 대한 정보를 가져오기 위해 하나 이상의 Data
Block을 반드시 읽어야 하므로 I/O Perfmance는 감소한다.


Solution Description
--------------------
1. Row chaining과 migration 확인

1) run ?/rdbms/admin/utlchain.sql
2) ANALYZE Command를 통해 Chaining과 Migrating의 횟수를 조사한다.
analyze table emp list chained rows;

2. 해결과정
1) 데이터 열을 CHAINED_ROWS 테이블의 ROWID를 사용하여 원래
테이블과 같은 행 구조를 가진 중간 테이블(intermediate table)로
이동시킨다.
2) 옮겨진 데이터 열을 CHAINED_ROWS 테이블의 ROWID를 사용하여 삭제 한다.
3) 중간 테이블로부터 열들을 다시 원래 테이블로 삽입한다.
4) 중간 테이블을 버린다.
5) CHAINED_ROWS 테이블의 레코드를 삭제한다.

이 과정이 수행되고 나면 analyze 명령은 다시 수행되야 한다. row가
다시 CHAINED_ROWS 테이블에 쌓이면 어떤 블럭에도 전체row 가 들어갈
충분한 공간이 없기 때문이다. 이것은 한 데이타 블럭의 한 row 가 너무
길어서 이거나 테이블의 PCTFREE 가 적절하지 못하기 때문이다. 전자의
경우는 chaine 현상이 일어날수 밖에 없고 후자의 경우 다음과 같이
PCTFREE 를 수정한다.


3. PCTFREE 값을 조정 하여야 하는 경우
1) 테이블에 대한 더 나은 퍼센트 프리 요소(percent free factor)를 결정한다.
2) 전체 테이블을 그 모든 의존관계(예를 들면, 인덱스, 그렌트(grants),
제약조건들 등)와 함께 export한다.
3) 원래 테이블을 버린다.
4) 새로운 사양으로 다시 만든다.
5) 테이블을 import한다.

from otn
오라클 유지보수 유건데이타
Comment
등록된 코멘트가 없습니다.