by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

세그먼트 공간 관리를 오라클에 맡겨라




1. PCTFREE 이란?

오라클의 블록 크기를 4K로 잡았다고 가정하고 이 4K에 데이타가 100% 꽉 차있다고 하자.
이 레코드 중 업데이트로 인해 데이터의 크기가 늘어나게 되면
4K 블록안에는 들어갈 자리가 없으므로 다른 4K짜리 블록을 새로 할당하여 레코드를 링크하게 되고
이를 블락 체인이라고 하여 이는 오라클 6일때까지 일어나던 현상이다. 하나의 레코드를 읽기 위해
여러 다른 블록을 읽어야 하므로 속도가 많이 떨이지 된다.

이를 향상하게 위해 나온 것이 로우 마이그레이션이다. 쪼개질 데이터가 있으면 링크를 거는 것이 아니라 로우 전체를 블록을 옮겨 버리는 것이다.
여기서 PCTFREE라고 하는 것은 PCTFREE를 10%로 줬을 경우 4K중 400바이트를 남겨두게 되고
이는 내부적으로 위화 같은 업데이트가 일어났을때 PCTFREE로 잡아 놓은 400바이트짜리 공간을
사용하게 되고 체이닝의 발생을 막는다.

  • 수정시 늘어나는 데이터를 수용하기 위한 공간입니다.
  • PCTFREE의 기본값은 10%입니다.
  • INSERT 일때에 PCTFREE값에 도달하면 블록은 꽉 찬 것으로 간주하고, 다른 블럭에다가 row을 추가합니다.
  • PCTUSED에 UPDATE를 하려고 하면, PCTFREE영역에 저정하여 data chinning이나 row migration을 하지 않고, row의 값을 update 시킬 수 있다.

2. PCTUSED 이란?

PCT FREE 10%로 잡아 놓은 상태에서 400바이트를 제외한 블록의 모든 공간을 사용하고 있을때 레코드를 하나 삭제했다고 하면 그블록의 사용율이
90%DPTJ 88%정도로 떨어졌다고 해보자.
그러면 새로운 레코드를 인서트할때 사용율이 88%정도로 떨어진 이 블록에다가 테이터를 넣을까?

넣지 않는다.

이유는 스토리지 메니지먼트 알고리즘이 너무 바빠지기 때문이다. PCTFREE의 경계선을 들락날락하는 블록이 엄청나게 많을 수가 있는데
이때마다 이 블록들을 관리하기 위해서 메니지먼트가 성능 저하을 초래한다.

즉 블록의 사용량이 일정 수준까지 떨어지기 전까지 새로운 데이타가 들어오지 못 하게하는 것인 PCTUSED이다.
PCTUSET를 60으로 주고 쓰고있근 공간이 60이하로 떨어지면 그때부터 새로운 데이터를 넣을 수 있게 프리 리스트에 등록을 해주겠다는 이야기 입니다.

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.