반응형
/********************************************************************************************
-- 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^
* 용어 정리-- 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이 두개(삭제용, 삽입용) 생성된다.
예) 인덱스 키를 업데이트 할 때.
반응형