본문 바로가기
컴퓨터

[데이터베이스] 오라클. PCTFREE, PCTUSED

by skyjwoo 2020. 5. 30.
728x90
반응형

Oracle DBMS에서 Disk에서 Buffer로 데이터가 올라올 때, 그 최소 단위를 data block으로 잡는다. 여기서 이 block은 OS의 block과는 다르다. 

 

이 block에 대해서 우리는 몇 parameter를 설정할 수 있는데 그 중에 PCTFREE와 PCTUSED가 있다. 

여기서 PCT는 Percent의 줄임말이다. 그러니 block 중에서 몇 percent를 비워두고 쓴 값으로 할 지에 대한 이야기이다. 

 

PCTFREE


우선 PCTFREE는 비어있는 값으로 설정할 범위이다. PCTFREE 20으로 주면 전체 block 중 20%를 비워놓겠다는 이야기이다. 그럼 이 설정값이 왜 필요할까? 이는 block에 들어있는 row의 자료형과 관련있다. row 내의 값을 수정했을 때 그 크기가 바뀌는 자료형이 있고 바뀌지 않는 자료형이 있다. char와 varchar는 이 차이를 잘 보여준다. char의 경우, 그 크기가 고정되어 있어 값을 바꿔줘도 크기가 바뀌지 않지만, varchar의 경우 값에 따라 그 크기가 가변적이다. 이렇게 가변적인 자료형은 값의 수정이 이뤄졌을 때, 특히 더 큰 크기의 값이 입력되었을 때, 현재 block에 자리가 없으면, 다른 block에 값을 넣어야하고, 이렇게 되면 다음에 읽을 때에도 Disk I/O가 늘어나게 된다. dbms에서 DISK I/O 횟수 증가는 치명적이기에, 우리는 되도록 한 block 내에서 이 문제를 처리하고 싶은 것이다. 이를 위해서 PCTFREE를 두어 block에 여유 공간을 남겨두어 다른 block을 참조하게 될 가능성을 최대한 줄이고자 하는 것이다. 

 

PCTFREE 높게 잡으면?

block당 사용되는 데이터의 양이 적으니 block 개수가 많이 필요하게 되고 table 내에서 색인 시에 DISK I/O가 더 많이 일어날 수 있다.  가변 길이 데이터에 대해 다른 block을 사용하게 될 확률이 줄어든다. 한 block내에서 해결 가능.

 

PCTFREE 낮게 잡으면?

가변 길이 데이터의 경우 손해를 볼 수 있다. 데이터 갱신 시 또 다른 block이 사용될 수 있다. block 개수가 덜 필요할 수 있다. (PCTFREE가 낮은 경우보다.)

 

->행들에 대한 update 얼마나 자주 일어나는 지 알아야 한다. 행들이 고정 길이 인지, 가변 길이 인지 알아야 한다. 

 

PCTUSED

 

PCTUSED는 block내에서 수정이 이뤄질 수 있는 기준선이다. 이 기준은 data block에 저장된 row의 비율이다. 저장된 row의 비율 이하로 내려가게 되면(삭제 등의 이유로), 그 때부터 데이터의 수정 및 삽입이 가능하게 된다. PCTUSED값이 높으면, 삽입과 갱신이 자주 일어날 수 있는 것이다. 예를 들어, PCTFREE 20, PCTUSED 80이면, 한 block에 최대 80%까지 사용될 수 있고, 80%이하로 떨어지면 갱신이 가능하다. 항상 80%이하인 상태로 있을 것이기에 언제나 갱신이 가능한 상태인 것이다. 반면, PCTFREE 20, PCTUSED 40인 경우 갱신이 block안의 데이터 사용량이 40%까지 떨어져야 가능하게 된다. PCTUSED는 데이터베이스의 DISK I/O가 어느 정도 자주 일어나는 지에 따라 결정될 수 있다. buffer(메인 메모리)에 올라왔을 때, PCTUSED가 40인 경우 대부분 40%이상의 공간이 비어있을 것이다. 반면, PCTUSED가 80인 경우 사용 가능 공간이 거의 없는 경우가 대부분일 것이다. 따라서 80인 경우에 DISK I/O가 많이 일어나게 된다. 잦은 갱신이 일어나는 DB의 경우 PCTUSED를 낮게 주어 buffer에서 최대한 많은 데이터를 담은 후 즉, 오래 버틴 후 쫓겨나게 되어 disk I/O를 늦춰줄 수 있다.

 

PCTUSED를 낮게 잡으면?

-block 공간의 활용도가 낮다. 삽입 제거가 간간히 일어난다. 데이터가 연속적으로 입력될 가능성이 높다.(한 번에 많이)

-데이터의 삽입/삭제가 자주 일어나는 경우에 적합하다. 연속성 유지, DISK I/O 절감 효과

 

PCTUSED를 높게 잡으면?

-block 공간의 활용도가 높다. 빈번하게 삽입, 제거가 일어난다. 데이터가 연속적이지 않고 섞일 가능성이 높다. 

-데이터의 삽입/삭제가 간간히 일어나는 경우(혹은 주로 읽기만 하는 데이터)에 적합하다. 연속성 유지(어차피 삽입 삭제 덜 일어남.), DISK I/O는 어차피 자주 일어나지 않음

728x90
반응형

댓글