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.