다음을 통해 공유


sp_filestream_force_garbage_collection(Transact-SQL)

적용 대상: SQL Server

불필요한 FILESTREAM 파일을 삭제하여 FILESTREAM 가비지 수집기(GC)를 강제로 실행합니다.

FILESTREAM 컨테이너는 GC에서 삭제된 모든 파일을 정리할 때까지 제거할 수 없습니다. FILESTREAM GC는 자동으로 실행됩니다. 그러나 GC를 실행하기 전에 컨테이너를 제거해야 하는 경우 GC를 수동으로 실행하는 데 사용할 sp_filestream_force_garbage_collection 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

sp_filestream_force_garbage_collection
    [ @dbname = ] 'database_name'
    [ , [ @filename = ] 'logical_file_name' ]
[ ; ]

인수

[ @dbname = ] 'database_name'

GC를 실행할 데이터베이스의 이름을 의미합니다.

@dbname sysname입니다. 지정하지 않으면 현재 데이터베이스가 가정됩니다.

[ @filename = ] 'logical_file_name'

GC를 실행할 FILESTREAM 컨테이너의 논리적 이름을 지정합니다. @filename 선택 사항입니다. 논리적 파일 이름을 지정하지 않으면 GC는 지정된 데이터베이스의 모든 FILESTREAM 컨테이너를 정리합니다.

반환 코드 값

설명
0 작업 성공
1 작업 실패

결과 집합

설명
file_name FILESTREAM 컨테이너 이름을 나타냅니다.
num_collected_items 이 컨테이너에서 가비지 수집(삭제)된 FILESTREAM 항목(파일 또는 디렉터리)의 수를 나타냅니다.
num_marked_for_collection_items 이 컨테이너에서 GC로 표시된 FILESTREAM 항목(파일 또는 디렉터리)의 수를 나타냅니다. 이러한 항목은 아직 삭제되지 않았지만 GC 단계에 따라 삭제할 수 있습니다.
num_unprocessed_items 이 FILESTREAM 컨테이너에서 GC에 대해 처리되지 않은 적격 FILESTREAM 항목(파일 또는 디렉터리)의 수를 나타냅니다. 항목은 다음과 같은 다양한 이유로 처리되지 않을 수 있습니다.

- 로그 백업 또는 검사점이 수행되지 않았기 때문에 고정해야 하는 파일입니다.

- 전체 또는 BULK_LOGGED 복구 모델의 파일입니다.

- 장기 실행 활성 트랜잭션이 있습니다.

- 복제 로그 판독기 작업이 실행되지 않았습니다. 자세한 내용은 SQL Server 2008의 백서 FILESTREAM Storage를 참조하세요.
last_collected_xact_seqno 지정된 FILESTREAM 컨테이너에 대해 파일이 가비지 수집된 마지막 LSN(로그 시퀀스 번호)을 반환합니다.

설명

요청된 데이터베이스(및 FILESTREAM 컨테이너)에서 완료할 FILESTREAM 가비지 수집 작업을 명시적으로 실행합니다. GC 프로세스는 더 이상 필요하지 않은 파일을 제거합니다. 이 작업을 완료하는 데 필요한 시간은 해당 데이터베이스 또는 컨테이너의 FILESTREAM 데이터 크기와 FILESTREAM 데이터에서 최근에 발생한 DML 작업의 양에 따라 달라집니다. 이 작업은 온라인으로 데이터베이스를 사용하여 실행할 수 있지만 GC 프로세스에서 수행하는 다양한 I/O 활동으로 인해 데이터베이스가 실행되는 동안의 성능에 영향을 줄 수 있습니다.

참고 항목

이 작업은 필요한 경우에만 실행하고 일반적인 작업 시간 외에 실행하는 것이 좋습니다.

이 저장 프로시저의 여러 호출은 별도의 컨테이너 또는 별도의 데이터베이스에서만 동시에 실행할 수 있습니다.

2단계 작업으로 인해 저장 프로시저를 두 번 실행하여 기본 FILESTREAM 파일을 실제로 삭제해야 합니다.

가비지 수집은 로그 잘림에 의존합니다. 따라서 전체 복구 모델을 사용하여 데이터베이스에서 최근에 파일을 삭제한 경우 해당 트랜잭션 로그 부분의 로그 백업을 수행한 후에만 가비지 수집되며 로그 부분은 비활성 상태로 표시됩니다. 단순 복구 모델을 사용하는 데이터베이스에서 로그 잘림은 데이터베이스에 대해 실행된 후에 CHECKPOINT 발생합니다.

사용 권한

db_owner 데이터베이스 역할의 멤버 자격이 필요합니다.

예제

다음 예제에서는 데이터베이스에서 FILESTREAM 컨테이너에 대한 GC를 fsdb 실행합니다.

A. 컨테이너 지정 안 하세요.

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';

B. 컨테이너 지정

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
    @filename = N'FSContainer';