SQL Server 기본 데이터 저장 단위 page 가 할당되는 모습을 살펴 보고자 아래 참고서적과 MSDN을 참조하여 아래와 같이 몇 가지 테스트를 했습니다.
ID INT IDENTITY,
PAGE1 CHAR(5000)
)
-- 아래 2행을 17회 반복 수행한 결과입니다.
INSERT INTO TBLPAGE1 VALUES('LAIGO')
EXEC SP_SPACEUSED TBLPAGE1
--------------------------------------------------------------------------
/* Mixed Extent 할당 */
TBLPAGE1 1 16 KB 8 KB 8 KB 0 KB
TBLPAGE1 2 24 KB 16 KB 8 KB 0 KB
TBLPAGE1 3 32 KB 24 KB 8 KB 0 KB
TBLPAGE1 4 40 KB 32 KB 8 KB 0 KB
TBLPAGE1 5 48 KB 40 KB 8 KB 0 KB
TBLPAGE1 6 56 KB 48 KB 8 KB 0 KB
TBLPAGE1 7 64 KB 56 KB 8 KB 0 KB
TBLPAGE1 8 72 KB 64 KB 8 KB 0 KB
/* Uniform Extent 할당 */
TBLPAGE1 9 136 KB 72 KB 8 KB 56 KB
TBLPAGE1 10 136 KB 80 KB 8 KB 48 KB
TBLPAGE1 11 136 KB 88 KB 8 KB 40 KB
TBLPAGE1 12 136 KB 96 KB 8 KB 32 KB
TBLPAGE1 13 136 KB 104 KB 8 KB 24 KB
TBLPAGE1 14 136 KB 112 KB 8 KB 16 KB
TBLPAGE1 15 136 KB 120 KB 8 KB 8 KB
TBLPAGE1 16 136 KB 128 KB 8 KB 0 KB
TBLPAGE1 17 200 KB 136 KB 8 KB 56 KB
-- 사용된 페이지, 할당된 페이지, 인덱스 및 테이블 포함 페이지 개수 확인
SELECT first, dpages FROM SYSINDEXES WHERE id = OBJECT_ID('TBLPAGE1')
---------------------------------
17 25 18
-- 데이터를 DELETE 해도 사용/할당된 페이지의 변화는 없음
DELETE FROM TBLPAGE1
SELECT dpages, reserved, used FROM SYSINDEXES WHERE id = OBJECT_ID('TBLPAGE1')
---------------------------------
17 25 18
-- 테이블의 첫 번째 페이지 정보 확인
SELECT first FROM SYSINDEXES WHERE id = OBJECT_ID('TBLPAGE1')
-- 0x720000000100
/* swap 00 00 00 72 00 01 */
SELECT CONVERT (int, 0x72)
-- 114
/* 데이터 페이지 내용 보기, 데이터 LAIGO 가 보입니다. offset 정보만 삭제되고 실제 데이터는 다른 데이터로 overwrite 되기 전까진 기존 값을 가지고 있다는 것을 확인할 수 있습니다. */
DBCC TRACEON(3604)
DBCC PAGE (LAIGO, 1, 114, 2)
-- TRUNCATE 후 사용/할당 페이지 확인
TRUNCATE TABLE TBLPAGE1
SELECT dpages, reserved, used FROM SYSINDEXES WHERE id = OBJECT_ID('TBLPAGE1')
---------------------------------
0 0 0
[참고자료]
페이지 및 익스텐트 이해
http://msdn.microsoft.com/ko-kr/library/ms190969.aspx
TRUNCATE TABLE(Transact-SQL)
http://msdn.microsoft.com/ko-kr/library/ms177570.aspx
[참고문서]
전문가로 가는 지름길3 - SQL Server 2000/2005 튜닝 (정원혁, 손광수)
작성자 : Lai Go / 작성일자 : 2009.11.05