LOB 데이터와 Shrink 작업

jevida(강성욱) 2016.09.15 10:44 Views : 1286

LOB 데이터와 Shrink 작업

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

LOB 데이터와 데이터베이스 축소 작업이 성능에 어떤 관계가 있을까? 실제로 LOB 데이터를 만들거나 삭제 후 데이터베이스를 축소하면 성능이 느려 질 수 있다고 한다. 성능이 느려진다는 것은 시스템의 물리적인 성능 뿐 아니라 해당 작업시간이 오래 걸리는 것을 뜻 한다.

 

데이터 파일 축소 작업이 실행되면 데이터 파일 끝에서 데이터를 읽어와 데이터 파일이 시작할 수 있는 부분으로 이동을 한다. LOB 데이터의 유형은 기본적으로 오프 행에 저장된다. 실제 데이터는 다른 위치에 저장되며 상위 노드에 해당 위치를 참고하는 포인터를 가지고 있다.

예를 들어 LOB 데이터 삭제 후 축소 작업이 진행 될 때 SQL Server 엔진은 LOB 데이터에 도착하게 되고 LOB 행이 존재하는지 확인 후 존재하는 경우 이를 해결하기 위해 해당 페이지를 참조하는 행을 찾고 테이블을 구성하는 페이지를 검색해야 한다. 이때 많은 양의 I/O가 발생하며 축소 작업은 오래 걸릴 수 있다.

 

간단한 예를 들어 LOB 데이터 삭제 후 실제 페이지에 남아 있는 경우를 확인해 보자.

CREATE DATABASE Lobtest

GO

 

use Lobtest

GO

 

CREATE TABLE t1 (c1 int IDENTITY(1,1) PRIMARY KEY, c2 ntext)

GO

 

INSERT INTO T1 (c2) VALUES (replicate('a', 20000))

GO

 

DBCC IND ('LobTest', 't1', 1)

GO

 

DBCC TRACEON(3604)

DBCC TRACEON(2514)

DBCC TRACEON(5201, -1)

GO

 

DELETE FROM t1

GO

 

DBCC IND ('LobTest', 't1', 1)

GO

 

DECLARE @dbid as int = db_id('Lobtest')

DBCC PAGE (@dbid, 1, 155, 3)

GO

 

 

 

 

 

 

LOB 데이터 삭제 이후에도 메타 정보를 가지고 있는 것을 확인 할 수 있다. 고스트 레코드로 상태로 삭제되었지만 페이지 반환은 아직 진행이 되지 않은 듯 하다. 축소 작업을 진행 하면 해당 메타 정보를 가지고 있는 페이지를 모두 확인해야 하기에 느려 질 수 있다.

 

 

 

[참고 자료]

 

 강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 14085
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 8719
1754 SQL Server 페이지 및 익스텐트 아키텍처(2/4) – 익스텐트 할당 및 빈공간 관리 jevida(강성욱) 2016.09.27 1625
1753 SQL Server 페이지 및 익스텐트 아키텍처(1/4) – 페이지 및 익스텐트 이해 jevida(강성욱) 2016.09.27 3996
1752 SQL Server Error Log 보관 주기 설정 jevida(강성욱) 2016.09.15 2280
1751 SQL Server 네트워크 백업 트러블슈팅(UNC 설정) jevida(강성욱) 2016.09.15 5420
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 4220
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1630
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1973
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1508
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1350
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1685
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1279
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 4780
» LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1286
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1104
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1232
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1114
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1191
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1347
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1731
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1288





XE Login