증상
Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 또는 SQL Server 2014에 LOB (large object) 열이 포함 된 테이블이 있다고 가정 합니다. Lob 데이터의 크기를 작게 하 여 LOB 열을 업데이트 하 고 다음 메서드를 사용 하 여 사용 되지 않은 공간을 회수 하려고 합니다.
-
DBCC SHRINKDATABASE/DBCC SHRINKFILE
-
ALTER INDEX (LOB_COMPACTION = ON)
이 경우 사용 하지 않은 공간을 회수할 수 없습니다.
해결 방법
이 문제는 다음 SQL Server 누적 업데이트에서 처음 수정 되었습니다.
SQL Server 2012 SP2에 대 한 누적 업데이트 2 /en-us/help/2983175
SQL Server 2012 SP1 용 누적 업데이트 11 /en-us/help/2975396
SQL Server 2008 R2 SP2에 대 한 누적 업데이트 13 /en-us/help/2967540
SQL Server 2014 누적 업데이트 2 /en-us/help/2967546
SQL Server 2008 SP3 용 누적 업데이트 17 /en-us/help/2958696
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
해결 방법
이 문제를 해결 하려면 다음 해결 방법을 사용 합니다.
-
모든 행을 새 테이블로 내보내고 행을 다시 이동 합니다. 이렇게 하면 LOB 데이터가 재구성 되 고 사용 되지 않은 공간이 해제 됩니다.
-
EMPTYFILE 옵션과 함께 DBCC SHRINKFILE를 사용 하 여 모든 데이터를 새로 추가한 데이터 파일로 이동한 다음 오래 된 데이터 파일을 제거 합니다. 이렇게 하면 사용 되지 않은 공간을 해제 하 여 LOB 데이터를 재구성 합니다.
추가 정보
다음 예제에서는 업데이트 하기 전에 TSQL 명령 table_name sp_spaceused 사용 하 여 사용 되지 않은 공간을 보여 줍니다. lob 데이터의 작은 크기를 사용 하 여 lob 열을 업데이트 하기 전과 후에는 다음을 수행 합니다.
성을 |
줄 |
하도록 |
데이터 |
index_size |
사용 하지 않는 |
table_name |
1000 |
261072 KB |
261056 KB |
16kb |
0kb |
업데이트 한 후 다음을 수행 합니다.
성을 |
줄 |
하도록 |
데이터 |
index_size |
사용 하지 않는 |
table_name |
1000 |
261072 KB |
199672 KB |
16kb |
61384 KB |
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.