[Oracle] Oracle의 Table / Row Chaining / Row Migration

JUNBEOM PARK·2022년 8월 25일
0

👍 Oracle

목록 보기
2/3

Table ?

테이블이란 , Row(행)과 Column(열)로 구성된 표 형식의 오브젝트로 데이터를 보관하는 역할을 함.
DB 내에 생성할 수 있는 테이블의 수는 제한이 없으며, 물리적인 제약이 없는 한 얼마든지 생성 할 수 있음.




Row 저장 방식 이란 ?

테이블의 Row는 테이블이 저장되는 테이블 스페이스를 구성하는 데이터 파일의 블록에 저장된다. 로우를 입력하는 처리(insert 문)를 수행하면, 블록의 데이터 저장 영역 중 밑단 부분 부터 데이터를 저장한다.
일반적으로 여러 Row를 하나의 블록에 저장한다. 오라클은 로우 데이터를 데이터 저장영역이 가득찰 때까지 집어 넣지는 않는다.




Row Migration

PCTFREE를 설정해블록에 빈 공간을 마련해두는 이유는 Update 문 수행 등으로 인해 데이터가 변경되 로우의 크기가 커질 수 있기 때문이다.
이때 데이터가 블록의빈 공간에 들어갈 수 없을정도로 커지면, 'Row Migration'이 발생한다. Row Migration이 발생하면, 변경으로 인해 증가한 데이터 뿐만 아니라 전체 Row의 데이터가 다른 블록으로 복사 된다. 해당 Row의 위치를 갖고있는 인덱스 등의 모든 오브젝트를 변경해야하는 일이 생기므로 원래의 블록에 새로 복사된 위치의 Pointer를 남긴다.


Row Migration이 발생한 Row의 데이터를 읽어오기 위해서는 'Row의 포인터가 저장되있는 블록'과 'Row의 데이터가 저장되있는 블록'을 둘 다읽어와야 한다. 따라서 'Row Migration'이 발생하지 않은 블록'을 읽어올때 보다 성능이 저하 된다. 해결방안은, PCTFREE를 좀 더 크게 설정하고 Row Migration의 발생을 억제하는 것이다.


Row Chaining

Row Chaining이란, 입력할 Row의 데이터 크기가 블록의 데이터 저장 공간보다 클 때발생하는 현상이다. 데이터 크기가 블록의 데이터 저장공간 보다 클 때 한 Row를 여러개의 조각으로 분리하고 각 조각을 다른 블록에 저장한다.

참고

https://devfunny.tistory.com/297
https://blog.naver.com/itperson/220879812591

profile
DB 엔지니어👍

0개의 댓글