출처 : OTN 9i http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/schema.htm#9079
================================================================================================
PCTFREE PARAMETER는 TABLE 생성시 지정할 수 있다.
이 값은 데이터베이스 블록내의 남겨놓는 공간으로서 INSERT를 위해 사용되지 않고 오로지
UPDATE를 위해 존재한다.
이를 설정하는 이유는 UPDATE가 일어나면서 ROW SIZE가 증가할 수 있으며 이로인해 블록공간을
다 사용한 경우 ROW MIGRATION (UPDATE로 인해 발생) 이 발생하는 걸 막기위해서이다.
좌측의 그림을 보면
PCTFREE 가 20%로 지정되어있다.
이 블록은 20%를 남기고 나머지 공간은
INSERT를 위해 사용되며 80%는 INSERT 되는 정보를 저장한다.
PCTFREE 공간을 남기고 블록이 꽉 찼다고 가정할 경우 해당 블록에 존재하는 ROW의 크기가 변하는 경우(UPDATE)
PCTFREE로 따로 떼놓은 공간을 사용하게 된다. 이 공간을 사용하고서도 블록공간이 부족한 경우 해당 ROW가 있던 위치에 주소값을 남기고 ROW의 알맹이는 다른 블록으로 이전(MIGRATION) 하게 된다.
<< FROM OTN 9i >>
결과적으로 이전된 ROW에 접근하기 위해 주소값이 남아있는 블록에 접근 후 그 주소를 따라 다시 또다른 블록을
탐색하여 이중으로 I/O가 발생하게 된다.
ORACLE은 기본적으로 10% 를 DEFAULT 값으로 가진다.
사용자는 PCTFREE 수치를 적절히 사용할 필요가 있다.
인덱스에 대한 PCTFREE는 INDEX 생성시에만 부여 가능하다.
================================================================================================
PCTFREE PARAMETER는 TABLE 생성시 지정할 수 있다.
이 값은 데이터베이스 블록내의 남겨놓는 공간으로서 INSERT를 위해 사용되지 않고 오로지
UPDATE를 위해 존재한다.
이를 설정하는 이유는 UPDATE가 일어나면서 ROW SIZE가 증가할 수 있으며 이로인해 블록공간을
다 사용한 경우 ROW MIGRATION (UPDATE로 인해 발생) 이 발생하는 걸 막기위해서이다.
좌측의 그림을 보면
PCTFREE 가 20%로 지정되어있다.
이 블록은 20%를 남기고 나머지 공간은
INSERT를 위해 사용되며 80%는 INSERT 되는 정보를 저장한다.
PCTFREE 공간을 남기고 블록이 꽉 찼다고 가정할 경우 해당 블록에 존재하는 ROW의 크기가 변하는 경우(UPDATE)
PCTFREE로 따로 떼놓은 공간을 사용하게 된다. 이 공간을 사용하고서도 블록공간이 부족한 경우 해당 ROW가 있던 위치에 주소값을 남기고 ROW의 알맹이는 다른 블록으로 이전(MIGRATION) 하게 된다.
<< FROM OTN 9i >>
결과적으로 이전된 ROW에 접근하기 위해 주소값이 남아있는 블록에 접근 후 그 주소를 따라 다시 또다른 블록을
탐색하여 이중으로 I/O가 발생하게 된다.
ORACLE은 기본적으로 10% 를 DEFAULT 값으로 가진다.
사용자는 PCTFREE 수치를 적절히 사용할 필요가 있다.
낮은 PCTFREE | 높은 PCTFREE |
UPDATE를 위한 적은 공간을 할당 | UPDATE를 위해 큰 공간을 할당 |
한 블록내에 많은 ROW | 한 블록내에 적은 ROW |
공간절약 | 공간낭비(하지만 CHAIN ROW 예방) |
인덱스에 대한 PCTFREE는 INDEX 생성시에만 부여 가능하다.