TECH
QUESTION
자주하는 질문답변 입니다.
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 | |||
---|---|---|---|
등록된 코멘트가 없습니다. |