row chaining , row migration

출처 : 블로그  Start from the Beginning 에서



Row Chaining 

1. 데이터가 커서 여러 블록에 나누어 저장하는 현상

-> 2개 이상의 데이터 블록을 검색해야 하므로 성능이 감소한다.

2. initial Row Piece(행 조각) 와 Row Pointer 로 블록 내에 저장

3. 해결책 : DB_BLOCK_SIZE 를 크게 하여 최소화 가능

-> 사이즈 변경이 어렵고, 무조건 크게 할 수 없음 


Row Migration 

1. update 로 인해 행 길이가 증가했을때, 저장 공간이 부족한 경우 발생 

2. 원래 정보를 기존 블록에 남겨두고 실제 데이터는 다른 블록에 저장

-> 검색 시 원래 블록에서 주소를 먼저 읽고 다른 블록을 찾아야 하므로 성능 감소

3. 해결책 : PCTFREE 영역을 충분히 할당한다.

-> pctfree 가 너무 큰 경우 데이터 저장 공간 부족으로 공간 효율성 감소 



Row Chaining 은 데이터 블록의 저장공간이 부족해서 생기는 점은 Row Migration 과 같지만 발생원인이 다르다. 

Row Migration 은 이미 저장된 데이터에 대해 Update 시 공간 부족에 따른문제 발생이라면, Row Chaining 은 애초에 저장을 할 때 공간이 부족해 발생하는 문제이다. 


로우체이닝과 로우마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스 메모리에서 디스크와 I/O (입력/출력) 가 발생할 때 불필요하게 I/O 가 많이 발생하여 성능이 저하된다. 


* 한 테이블에 많은 수의 칼럼을 가지고 있는 경우


도서정보라고 하는 테이블에 칼럼수가 아주 많은 경우 생략된 칼럼까지 합하면 대략 200개 가정 만약 하나의 로우의 길이가 10KBYTE 라고 하고 블록은 2K 단위로 쪼개져 있다고 가정한다. 또한 블록에 ㅔ이터는 모두 채워지나고 가정하면 대략 하나의 로우는 블록에 걸쳐 데이터가 저장될 것이다. 

이 때 칼럼의 앞쪽에 위치한 발행기관명, 수량, 중간에 위치한 공고일 , 발행일에 대한 정보를 가져오려면 물리적으로 칼럼의 값이 블록에 넓게 산재되어 있어 디스크 I/O 가 많이 일어나게 된다. 

컬럼의 수가 많은 테이블에서 데이터 처리하게 되면 디스크 I/O 양이 증가하여 성능이 저하됨 










댓글