Oracle 10g 강좌
PCTFREE, PCTUSED, and Row Chaining 9 4 13,428

by 김정식 PCTFREE PCTUSED ROW CHAINING ROW MIGRATION [2006.04.10]


PCTFREE

  사용 가능한 Block 공간 중에서 데이터 행의 UPDATE 에 대비하여 확보해 놓는 블록의 퍼센트 값 입니다.

  PCTFREE의 기본값은 10% 입니다.

  PCTFREE값에 도달하면 블록은 꽉 찬 것으로 간주하고, 새로운 Row를 추가 할 수 없습니다.

  PCTFREE값이 도달된 후 블록내에 남은 공간은 기존의 Row가 Update되어 공간이 추가로 필요할 때 사용됩니다.

  PCTFREE와 PCTUSED의 합이 100을 초과하지 않는 범위 내에서 0에서 99까지의 값을 PCTFREE 값으로 사용할 수 있습니다. (PCTFREE+PCTUSERD <= 100)

  PCTFREE = 20 : 블록의 20%를 사용 가능한 빈 영역으로 유지하여 각 블록에 있는 행을 갱신하는데 사용한다는 의미입니다

PCTFREE가 적을 경우

  - 기존 테이블 행 갱신에 의한 확장을 위해 적은 공간을 확보 합니다.

  - 많은 로우가 한 블록에 입력 가능합니다.

  - 수정이 적은 세그먼트에 적합 합니다.

PCTFREE가 클 경우

  - 블록당 적은 row가 입력됩니다. 즉 같은 row를 입력하기 위해서 많은 블록이 소요 됩니다.

  - 행 조각을 자주 체인화할 필요가 없으므로 수정 수행 속도가 증가 합니다.

  - 자주 수정되는 세그먼트에 적합 합니다.

 

PCTUSED

  데이터블록의 Free Space의 퍼센트가 PCTFREE에 도달한 후, 사용된 공간이 PCTUSED 이하의 값이 되기 전까지 해당 블록에 새로운 Row를 추가 할 수 없습니다. 즉 PCTUSED에 도달하기 전까지는 새로운 행을 INSERT하지 못하고 기존의 행을 UPDATE만을 할 수 있습니다.

  PCTUSED = 40 : 데이터 블록의 사용영역이 39%보다 적어지지 않으면 새로운 행을 INSERT할 수 없음을 의미 합니다.

 

PCTFREE와 PCTUSED

 

Row Chaining 과 Row Migration

Row Chaining

  - Row Chaining은 DB_BLOCK_SIZE보다 너무 큰 데이터가 들어왔을 경우 인접한 다른 블록까지 데이터가 쓰여지는 것을 말합니다. 이 데이터 블록은 원래 블록과 연결 되어 집니다.

  - Row Chaining은 블록이 하나의 I/O 작업과 동일한 양을 수행하기 위해 두 개의 I/O를 사용해야 하므로 성능상의 부하를 줍니다.

Row Migration

  - UPDATE시 로우에 저장된 Data의 양을 증가시켜 더 이상 그 블록에 저장될 수 없을경우 새로운 Block으로 데이터를 완전히 옮기는데 이를 Row Migration 이라고 합니다.

  - 즉 Update시 공간이 부족할 때 발생하며, Data 행을 완전히 채울 수 있는 새로운 Block 에 저장 됩니다

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1895

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 유경민 [2007.12.24 12:08:22]
블록의 Free Space가 PCTFREE 값 아래로 떨어지면 Free List에 등록됩니다.
블록은 PCTUSED 이하의 값에 도달하면 Free List에 등록이 됩니다.
10G 부터 이렇게 바뀌는 건가요? 이렇게 되면 문제가 있을 거 같은데...

by 손님 [2012.03.20 10:33:40]
항상 여기와서 보고 이해 하고 갑니다~ ㅎ

by 서기 [2014.02.09 20:43:47]

Free Space 가 클 경우 아래와 같다고 하는데 이해가 잘 안 되네요 ㅠ  
- 행 조각을 자주 체인화할 필요가 없으므로 수정 수행 속도가 증가 합니다.

Free Space 가 클 경우 row data 를 저장하기 위해서 더 많은 블락을 사용하는데
Chaining 을 할 필요가 없나요? 제가 이해할 수 있게 알려주실 분 계신가요? ^^;


by 임상준 [2014.02.10 08:55:27]

체이닝은 하나의 row 가 여러 블록에 걸쳐서 입력 되어 있는 상태를 말합니다...
블록을 많이 쓰는거랑은 다른 개념입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입