행의 이동(Forward Record)(Forwarded Record)

 

행이 이동하는 경우 : 힙(Heap)에서 가변 컬럼을 현재 값보다 더 큰 크기의 값으로 갱신할 경우

 

이 때 기존의 페이지에는 더 커진 행의 값에 대한 공간이 없어서 새로운 값을 넣을 수 없으므로 새로운 행을 다른 페이지에서 할당 받아 값을 넣고 기존의 행에서 이 새로운 행을 가리키는 포워딩(forwarding)을 하게 된다. 포워드 된 행은 DBCC PAGE 명령으로 보면 FORWARDED_RECORD 라고 나타나고, 원래 그 행이 있던 자리에는 새로운 포워드 된 행을 가리키는 FORWARDING_STUB 이 나타난다.

 

"AA"  ->  "kkkkkk"  ->  "ffffffffffffffffffff" 의 경우 "AA" 가 직접 "fffffffffffffff"를 가리키도록 바꾼다.

 

언제 제자리로 돌아올까?

1. "ffffffffffffffffff" 가 다시 "AA"로 줄어들면 된다. 이동 전의 크기 혹은 그 이하로 줄어들 때

2. DBCC SHRINKDATABASE (책에 될 때도 있고, 안될 때도 있으며 정확히 모르겠다고 함)

3. 클러스터드 인덱스가 없기 때문에 생기는 것이므로 클러스터드 인덱스를 만든다. (좋은 해결책 이라고 함)

 

 Ref . server 2000/2005 튜닝 / SQL Server 완벽 튜닝 - 정원혁, 손광수 공저. 대림 출판사. 148p

 

Ghost Record

 

클러스터드 인덱스에서 행의 이동이 일어나는 경우 Ghost Record가 일어난다.

by 짱구를꼭말려 2014. 1. 10. 18:11