블록에서 PCTFREE와 PCTUSED에 대한 궁금점. 0 5 2,229

by 김선호 [2007.12.06 16:18:15]


DBA를 목표로 열심히 공부하고 있는 군바리입니다.

다름아니고 강좌를 보다 갑자기 궁금한 점이 있어서 글을 올립니다.

 

PCTUSED 는 블록에서 설정 값만큼 인서트할 때 사용하겠다는 거고

(ex.PCTUSED=90, 90%만큼 인서트, 만약 90%가 넘으면 다음블록으로 이동해 새로 인서트)

 

PCTFREE는 업데이트시에 칼럼 길이가 늘어날경우 채인발생을 막기위해 남겨두는 블록의 여유공간(ex.PCTFREE=5, 5%는 UPDATE시 늘어난 칼럼의 데이터를 넣기 위해 남겨둔다)을 남겨두는 걸로 알고 있습니다.(%로 계산하는게 맞는지 모르겠군요.)

 

그런데 여기서 궁금한게 PCTFREE를 5로 주고 PCTUSED를 90으로 주면.

나머지 5만큼의 공간은 어떻게 되는건가요? 그냥 아무 일도 안하고 놔두는 건가요? 아니면 인서트시 공간 확보를 위해(ex. 블록의 공간이 89만큼 차있는데 5만큼의 데이터를 입력하면 94의 블록을 사용) 남겨두는 공간인가요?

 

답변 주시면 감사하겠습니다!

by 웅 [2007.12.06 00:00:00]
일단 PCDFREE+헤더를 제외한 나머지 크기에 입력이 된 후 이런저런 이유로 데이터가 적어져 PCDUSED까지 내려가면 그 블록에 다시 인서트가 가능한 상황 (FREELIST에 포함)이 되는것..으로 알고 있습니당

by finecomp [2007.12.06 00:00:00]
PTCUSED가 90%면 사용량이 91%가 되는 순간 더 이상 그 block에 신규행 insert를 못할껄요...^^;

by 1 [2007.12.06 00:00:00]
이야기 하신것처럼 INSERT ,UPDATE 를 위한 공간이지요 각각 별개로 생각하세요.
말그대로 하나의 블록을 바라봤을때
PUTUSED 이하면 FREE LIST 에 등록되어
신규 INSERT 에 사용가능한 BLOCK LIST 에 등록 되는것입니다.
PCTFREE는 FREELIST 하고는 완전 별개로 이야기 하신것처럼 UPDATE 를 하기 위해서 남겨둔것입니다.
USED 는 INSERT 를 위한 기준점이고,
FREE 는 UPDATE 를 위한 기준점입니다.
PCTFREE 를 5주시고 PCTUSED를 90으로 주셨다면
USED 가 90까지 INSERT 가 되고,
90 이상이면 INSERT 가 안되겠죠.

by ㅎㅎ [2007.12.07 00:00:00]
PCTUSED = 90 , PCTFREE = 5 일때

[ INSERT ]
90% 이하인 블록을 찾아(FREE LIST) INSERT 시작
5% 남을때까지 INSERT 이후 다른 블록이동

[ UPDATE ]
무조건 BLOCK 한계 (100%) 까지 UPDATE 후
다른 블록으로 이동

PCTUSED 값이 FREELIST 와 관련 있는 것은 맞습니다.
하지만 FREELIST 를 통해 적합한 블록을 찾고 나서
INSERT시에는 PCTFREE 값만 남을때까지 쓰게됩니다.

이후 100% 였던 블록은 DELETE 또는 UPDATE 로
PCTUSED 값 이하로 바뀔 경우 FREE LIST 등재 후
INSERT 가능해짐..

PCTUSED는 FREELIST에 등록되기 위한
값이라고도 할 수 있습니다.

by 김선호 [2007.12.07 00:00:00]
나머지 5%는 오직 업데이트시에 사용되는 공간이군요. 답변 감사합니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입