발생절차 (행연결)
1. 데이터가 커서 여러 블록에 나누어 저장
1. Initial Row Piece (행 조각)과 Row Pointer를 블록 내에 저장
로우 체이닝은 한개의 Row에 들어가는 컬럼 수나 컬럼당 데이터 크기 최소화 또는 데이터 압축으로 방지할 수 있다.
DB_BLOCK_SIZE를 크게하여 해결 가능하지만 DB_BLOCK_SIZE는 함부로 건드리는게 아니라고 함..
때문에 테이블의 한 로우에 들어가는 컬럼의 수나 크기를 줄이고, 압축된 형태의 데이터를 넣는 방법 등을 우선순위에 두고 해결하도록 해야한다.
로우 마이그레이션
은 데이터 블록의 저장공간이 부족해서 생기는 점은 로우 체이닝
과 같지만,
이미 저장된 데이터에 대해 Update시 공간 부족으로 인해 발생한다는 점에서 로우 체이닝
과 발행하는 원인이 다르다.
발생절차 (행이전)
1. Update로 인해 행 길이가 증가하여 저장공간이 부족
실제 데이터를 새로운 블록에 저장
기존 블록에는 새로운 저장공간에 대한 포인터 값을 저장
검색시 기존 블록에서 주소를 먼저 읽고난 후 실제 데이터가 저장된 블록을 찾는다. ▶️ 성능이 감소 됨
PCTFREE로 여유공간을 확보하여 해결할 수 있다. 하지만 PCTFREE가 너무 큰 경우 데이터 저장 공간 부족으로 공간 효율성이 감소될 수 있다.
update를 자주 하는지, update에 따라 데이터 길이가 자주 바뀌는지 미리 파악하는 것이 중요하다.