힙테이블에서 행을 삭제하면 어떻게 처리 될까?
힙테이블(Heap Table)에서 행을 삭제하면 실제로 데이터가 삭제 될까?
사실은 실제 데이터가 삭제되지 않고 삭제 된 것처럼 오프셋의 값만 초기화 시킵니다.
테이블을 생성하여 데이터를 입력하고 삭제함으로써 데이터 페이지에는 어떤 변화가 일어나는지 살펴봅니다.
[전체 코드]
CREATE TABLE TBL_X (COL1 CHAR(5), COL2 CHAR(5)) GO
INSERT INTO TBL_X VALUES ('A', 'B') INSERT INTO TBL_X VALUES ('C', 'D') GO
SELECT * FROM TBL_X GO
SELECT * FROM SYS.SYSINDEXES WHERE ID = OBJECT_ID('TBL_X')
DBCC TRACEON (3604)
DBCC IND(SW_TEST, TBL_X, 0) DBCC PAGE (SW_TEST, 1, 1319, 1) WITH TABLERESULTS DBCC PAGE (SW_TEST, 1, 1319, 3) WITH TABLERESULTS
DELETE TBL_X WHERE COL2 = 'D'
SELECT * FROM TBL_X
DBCC PAGE (SW_TEST, 1, 1319, 1) WITH TABLERESULTS DBCC PAGE (SW_TEST, 1, 1319, 3) WITH TABLERESULTS DBCC PAGE (SW_TEST, 1, 1319, 2) WITH TABLERESULTS |
테이블을 생성하고 데이터를 입력 합니다.
CREATE TABLE TBL_X (COL1 CHAR(5), COL2 CHAR(5)) GO
INSERT INTO TBL_X VALUES ('A', 'B') INSERT INTO TBL_X VALUES ('C', 'D') GO
SELECT * FROM TBL_X GO |
DBCC 명령어를 이용하여 할당 정보를 확인 합니다.
DBCC IND(SW_TEST, TBL_X, 0) |
페이지 정보를 확인 할 수 있도록 플래그 3604를 ON하고 페이지를 조회 합니다. 2개의 행이 있는 것을 확인 할 수 있습니다.
DBCC TRACEON (3604) DBCC PAGE (SW_TEST, 1, 1319, 1) WITH TABLERESULTS |
DBCC PAGE (SW_TEST, 1, 1319, 3) WITH TABLERESULTS |
COL2의 값이 'D'인 행을 삭제 합니다. 그리고 페이지를 조회 합니다. Slot1의 데이터가 표시되지 않고 오프셋이 0으로 바뀐 것을 확인 할 수 있습니다.
DELETE TBL_X WHERE COL2 = 'D'
DBCC PAGE (SW_TEST, 1, 1319, 1) WITH TABLERESULTS |
DBCC PAGE (SW_TEST, 1, 1319, 3) WITH TABLERESULTS |
DBCC PAGE의 3번째 값을 2 옵션으로 실행하여 메모리 내용을 DUMP 합니다. 삭제할 행의 오프셋 위치 값을 확인해 보면 삭제되지 않고 그대로 데이터가 존재 함을 확인 할 수 있습니다.
DBCC PAGE (SW_TEST, 1, 1319, 2) WITH TABLERESULTS |
즉 실제로는 데이터가 삭제되지 않고 삭제된 것처럼 오프셋의 값을 초기화 함으로써 삭제의 기능을 구현한 것을 확인 할 수 있습니다. 만약 실수로 인하여 데이터를 삭제하였다면 다른 데이터로 덮어 쓰기 전까지는 이전 데이터 값이 그대로 유지되므로 복구는 가능하리라 생각됩니다.
참고 자료 : SQL Server 튜닝 2000/2005 (정원혁 / 대림출판사)
2012-08-01 / 강성욱 / http://SQLMVP.KR
'SQL Server > SQL Server Tip' 카테고리의 다른 글
Ghost Record(인덱스에서 행 삭제시 발생) (1) | 2015.07.17 |
---|---|
프로시저, 함수, 트리거 생성 정보 보기 (0) | 2015.07.17 |
SSMS의 디자이너에서 테이블 수정 시 발생하는 영향 (0) | 2015.07.17 |
SQL Server를 활용한 Perfmon 로그 저장 (0) | 2015.07.17 |
VLF 환경과 성능 (0) | 2015.07.17 |