반응형
/********************************************************************************************
-- Title : [2k5] Heap/CL/NC에서의 insert/update/delete 고찰
-- Reference : Inside Microsoft SQL Server 2005: The Storage Engine
-- Key word : IAM PFS in-place not-in-place ghost forward record pointer offset
********************************************************************************************/
-- 몇년 전 정원혁 강사님께 강의 받았던 기억이 있었는데
-- 정00 대리가 질문을 하는 통에 다시 정리 해 봤당...^0^

   HEAP Heap-NONCLUSTERD CLUSTERED
 INSERT * IAM, PFS에서 빈공간 찾아
  삽입.
* Data Page : Heap과 동일.
* Index Page :
   Leaf page에 필드 값으로
   정렬된 위치 페이지 저장.
* CL키에 따라 특정 Page에
  정렬되어 삽입.
* 공간 없을 때 Page Split.
 UPDATE * Forward Record 발생
  가능.
* Forward Record 발생
  가능. 
* Not-In-Place Update시
  - Ghost Record 발생 가능.
  - Page Split 발생 가능.
 DELETE * Offset만 0x00으로 하고
  데이터는 그대로.
  즉, 페이지 압축이 일어나
  지 않음.
* Ghost Record 발생 가능 * Offset만 다시 정렬하고
  데이터는 slot에 존재.
  (= Ghost Record)

* 용어 정리
  - Ghost Record : 인덱스가 있는 행을 삭제할 경우 인덱스 리프 레벨에서 Ghost Record로 표기해 놓고
                          내부 Task Manager(SP=6)가 주기적으로 삭제.
                          삭제에서 발생.(CL의 경우 Not-In-Place 업데이트 경우에도 발생 됨)
                          인덱스 리프 페이지나 데이터 페이지 Slot에서 Ghost Record 확인 가능.(dbcc page)

  - Forward Record : HEAP에서 가변 컬럼의 업데이트시 현재 값보다 신규 값의 길이가 큰 경우 다른 페
                              이지로 ROW 이동.
                              원래 페이지에는 신규 페이지의 행을 가리키는 Forward Pointer 저장.
  
  - In-Place : 업데이트시 해당 ROW의 크기에 변화가 없어 그 자리에서 변경된 byte만 업데이트.
                    한 ROW의 업데이트 시 Input Stream이 하나만 생성된다.

  - Not-In-Place : 업데이트시 해당 ROW에 대해 기존 ROW의 삭제 후 신규 ROW를 삽입하는 업데이트.
                         '삽입 후 삭제' 업데이트.
                         한 ROW 업데이트 시 Input Stream이 두개(삭제용, 삽입용) 생성된다.
                         예) 인덱스 키를 업데이트 할 때.
 
반응형

+ Recent posts