'Migration'에 해당되는 글 1건

320x100

[데이타타입] VARCHAR2

Posted on 2009. 5. 12. 13:38
Filed Under DB


DataBase에서 table을 create하고 column의 data type을 varchar2 type으로 설정하고 data를 insert한다.
varchar2 type의 장점은 data의 길이가 가변적이라는 것이다.

따라서 varchar2(100)으로 선언한 후 'SAMPLE' 라는 data를 저장하면 'SAMPLE'만큼의 메모리만 할당하여 저장한다.
만약 후에 더 많은 data(100 이하)를 저장할 일이 있을 때 메모리 공간이 가변적으로 더 많이 할당되어 저장할 수 있다.

하지만 이 때 생각해 볼 것이 있다. 이미 'SAMPLE'만큼의 data가 저장되면 메모리상에서 그 이후에 다른 data들이 저장되어 있을 것이다.

하지만 이 column을 'SAMPLE...bla...bla...bla...'로 저장하면 현재 data의 이후의 data들은 모두 뒤로 밀려나야 하나?
이렇게 되면 update할 때 마다 성능에 치명적인 영향을 미칠텐데...?

정답은 '아니다.'이다.
varchar2 type으로 사용할 경우 column의 data가 더 크게 update되면 현재 공간에 삽입이 불가능하게 되고 이럴 때 그 data는 메모리의 다른 부분으로 옮겨가서 저장된다. 그리고 현재 위치에는 data가 옮겨가서 저장된 메모리의 새로운 주소가 저장되게 된다. 만약 이후에 계속 update가 여러번 발생해서 data block이 계속 옮겨가게 된다면 그 전의 메모리 주소에는 새로운 주소가 계속 저장되게 되고, 이러한 현상이 반복되면 이 data를 reference할 때 링크를 계속 따라가야하므로 많은 성능저하가 일어나게 된다.
이러한 현상을 row migration이라 한다.
migration은 성능에 치명적인 영향을 미치게 된다.

따라서 이러한 현상으로 인한 성능저하를 피하기 위해서, data를 모두 삭제 후 다시 insert를 하면 메모리에 다시 순서대로 저장되 된다. 이렇게 일정한 주기적으로 DataBase를 관리해주어야 한다.

PS. varchar2 type은 'abc', 'abc ', 'abc  '모두 다르게 인식, 저장한다.

반응형

About

by 쑤기c

반응형