본문 바로가기
컴퓨터/Oracle

[Oracle]Row chaining, Row migration 로우체이닝 로우마이그레이션

by TEATO 2014. 7. 14.
반응형

[Oracle]Row chaining, Row migration 로우체이닝 로우마이그레이션


 

row chaining , row migration 성능에대해 고려하기위해 꼭 알아야될

중요한 단어입니다.


 Row chaining

로우 체이닝은 하나의 값이 여러블락에 거쳐 저장될때를 말한다.

저장엔문제가없지만 셀렉트할 때 한블럭만 읽어도될걸 여러블락을 읽어야하므로 성능이떨어진다.

 Row migration

최초로 저장된 블락에 프리스페이스가 없어서 새로운블락을 할당받아서 거기로 옮긴뒤

수정하는것을 마이그레이션이 일어난다고한다.

이러한 현상을 최소화 하기위해서   pct_free, pct_used를 설정해 줘야하는데요


PCT_FREE

PCTFREE 10을 주면 데이터를 저장할 때 블락내에 10%공간만큼 비워놓는 것입니다.

업데이트가있을때 추가적인 정보를 여기에 저장하게되면 마이그레이션이 일어나지않겠죠.


더 이상의 업데이트가 없을 테이블이라면 PCTFREE를 없애는것이 좋습니다.

업데이트가 예상되지않는 테이블에 PCTFREE를 주면 공간낭비만 되겠죠


자주 업데이트가일어난다면 PCTFREE를 적당량 주는것이 체이닝과 마이그레이션을 줄일 수 있겠죠.



 PCT_USED

 PCTUSED는 전체공간중에서 몇퍼센트만 저장할지 결정하는 것입니다.

PCTUSED 60이면 60%이상 데이터가 차면 더 이상 이블락에는 데이터를 저장하지않는것을 말합니다.

10G버젼 이상부터 DEFAULT값은 NULL인데 서버가 가진 알고리즘에의해 자동으로 결정됩니다.

테이블스테이스만들때 AUTO인지 MANUAL인지 결정할수있습니다.

이부분은 수동관리하기가 어려워 USERAUTO로 하는것이 일반적입니다.


체이닝과 마이그레이션 영어 설명이에요 ㅋㅋㅋ


그림을 보시면 좀더 이해하기 좋으실거라 생각합니다.




테이블을 만들때 지정해주지않으면 PCTFREE는 자동으로 만들어지는데요

위를보시면 PCT FREE가 10으로 되있는것을 볼수 있죠

DEFAULT값이 10인것을 알 수 있습니다.



DBA권한으로 들어가서 DBA_TABLESPACES를 조회해보면

수동관리인지 자동관리인지 보실 수 있습니다.

유저테이블 스페이스는 자동인걸 볼 수 있죠



로우체이닝과 마이닝이 어떻게 발생하는지

알아보기위해 실습테이블을 만들어보겠습니다.


총 1024개의 데이터가 될때 까지 복사를 해봤습니다.


오라클홈디렉토리에서 위와같은 경로를 가보시면

utlchain.sql이라는 sql문이 작성되어있습니다.

이것을 실행시켜서 테이블을 만들어 보겠습니다.


chained_rows라는 테이블이 만들어졌죠

체이닝이 발생하게 되면 여기에 정보가 저장됩니다.



아직 아무런 데이터작업을 하지않았기때문에 체이닝이 발생한 것이 아무것도 없는것을

확인하실 수 있습니다.


체이닝 발생을 강제로 유발해보겠습니다.

a를 전부 aaaaaaaaaaaaa로 바꿔준다면 체이닝이 많이 일어나겠죠?


분석을 다시해보니 1999개나 발생했군요 ㅋㅋㅋㅋ


체인이 발생한것을 제거하기위해서 chain_tmp라는 테이블을 만들어서 체인이 발생한 것들을

저장했습니다.


그리고나서 업데이트한 테이블인 chain_test에 체인이 발생한것을 제거했습니다.

이제 여러블락이 나눠서 저장된것들이 없어졌겠죠?


tmp에 저장해뒀던 데이터를 insert해줘서 원래 데이터데로 복구해줍니다.


이렇게 되면 체이닝없이 업데이트됬던 항목들을 다시 저장할 수 있죠 ㅎㅎ


pctused는 사용자가 정하기 정말 어려운데요. 요즘 서버가 알아서

분석해서 자동조절을 잘 해주기때문에 이것은 테이블 만들때 설정하지 않아도 됩니다.

특별하다면 설정해야겠지만 일반적으로는 설정하지않습니다.

pctfree는 꼭 설정해야할 항목인데요.

일반적인 테이블은 설정하지않아도 되지만 업데이트가 자주일어나는 테이블,

또는 업데이트가 아에 일어나지않는 테이블,,, 이러한 테이블은 꼭 설정을 해줘야

공간낭비를 줄이고 체이닝도 줄일수 있겠죠~



반응형

댓글