데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

LOB 데이터와 Shrink 작업

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

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
1750 SQL Server 인증 실패시 반환되는 클라이언트 메시지 정보 jevida(강성욱) 2016.09.15 3703
1749 SQL Server에 할당된 메모리 개체 확인 jevida(강성욱) 2016.09.15 1583
1748 SQL Server 비동기 업데이트 활성 / 비활성에 따른 특성 jevida(강성욱) 2016.09.15 1704
1747 DBCC CHECKDB와 Compute Column 인덱스의 성능 관계 jevida(강성욱) 2016.09.15 1435
1746 Collation에 따른 DMV 실행 오류 jevida(강성욱) 2016.09.15 1310
1745 참조 개체 확인 (sys.sql_expression_dependencies) jevida(강성욱) 2016.09.15 1578
1744 특정 테이블의 마지막 접근 시간 알아보기 jevida(강성욱) 2016.09.15 1239
1743 SQL Server Fill Factor (채우기 비율)에 관한 오해와 진실 jevida(강성욱) 2016.09.15 3662
» LOB 데이터와 Shrink 작업 jevida(강성욱) 2016.09.15 1239
1741 데이터베이스 함수 검색 하기 jevida(강성욱) 2016.09.15 1063
1740 필터 통계 사용과 파리미터 사용 jevida(강성욱) 2016.09.15 1180
1739 유지관리 계획과 병렬처리 – Index Rebuild jevida(강성욱) 2016.09.15 1071
1738 유지관리 계획과 병렬 처리 – CHECKDB jevida(강성욱) 2016.09.15 1132
1737 쿼리 사이즈(길이) 에 따른 CPU 사용량 증가 jevida(강성욱) 2016.09.14 1302
1736 Ad-hoc 쿼리를 매개변수화 하여 성능 높이기 jevida(강성욱) 2016.09.14 1662
1735 통계 업데이트 옵션(ROWCOUNT and PAGECOUNT) jevida(강성욱) 2016.09.14 1233
1734 SQL Server Plan Guide 생성 및 사용 jevida(강성욱) 2016.09.14 1422
1733 SQL Server 그래픽 실행 계획 노드 정보 jevida(강성욱) 2016.09.14 1066
1732 프로파일러를 이용한 실행계획 캡처하기 jevida(강성욱) 2016.09.14 959
1731 SQL Server 그래픽 실행 계획 및 텍스트 실행 계획 jevida(강성욱) 2016.09.14 3123





XE Login