[DATABASE] 데이터베이스 블락의 옵션 PCTFREE, PCTUSED, INITRANS, MAXTRANS 의미 파악하기
테이블이나 인덱스같은 저장공간의 데이터블록에 설정 가능한 옵션입니다.
INITRANS 와 MAXTRANS
* INITRANS
1. 데이터 블록에 동시에 접근 가능한 트랜잭션의 초기 수를 의미합니다.
2. 트랜잭션이 많이 발생하는 경우 MAXTRNAS 까지 늘어나며, PCTFREE 로 확보된 영역에 추가 확장됩니다.
* MAXTRANS
1. 데이터 블록에 접근 가능한 최대 트랜잭션 수를 의미합니다.
2. 접근하는 트랜잭션 수가 MAXTRNAS 값을 초과하는 경우, 앞의 트랜잭션이 COMMIT 혹은 ROLLBACK 을 해야 다음 트랜잭션이 접근 가능합니다.
그렇다면 INITRANS 를 많이 설정해도 되지 않을까 라는 생각을 하게 되는데,
INITRANS 을 위한 슬롯도 블록에 공간을 차지하며, 트랜잭션이 많지 않은 경우 낭비를 하게 되므로 굳이 크게 설정할 이유는 없습니다.
PCTFREE 와 PCTUSED
* PCTUSED
1. 블록 사용량이 설정된 값 이하로 내려가는 경우 블록을 재사용 합니다.
* PCTFREE
1. 블록에 저장된 데이터의 크기가 증가할 것에 대비하기 위한 여유 공간을 설정합니다.
2. 이 공간에는 INITRANS 에서 증가되는 슬롯도 포함됩니다.
사진으로 설명을 같이 해보겠습니다.
* 사진 1
블록의 90 % 가 사용되고 있는 상태입니다.
이 때, 블록의 데이터가 증가하게 되면 다음 블록으로 넘어가는 Row Migration 이 발생합니다.
* 사진 2
블록에 저장된 데이터가 삭제되어 블록의 50 % 정도만 사용하고 있습니다.
이 때, 다시 바로 블록을 사용할 수도 있지만 PCTUSED 값의 설정에 의해 사용률이 40 % 이하로 떨어질 때 까지 이 블록은 사용되지 않습니다.
* 사진 3
블록의 데이터가 계속 삭제되어 40 % 정도만 사용하고 있습니다.
이 때에는 블록이 다시 재사용 할 수 있는 상태로 설정됩니다.
그렇다면 PCTUSED 값을 높게 설정하여 낭비되는 공간을 줄이면 좋지 않을까?
높을 경우 공간활용 측면에서는 좋을 수 있지만,
데이터 블록이 자주 재활용 되면서 처리 비용이 증가하게 되고, 한 블록에 연속된 관련있는 데이터들이 들어있지 않게 됩니다.