sys.sp_filestream_force_garbage_collection (Transact-SQL)

Aplica-se a: SQL Server

Força o coletor de lixo (GC) FILESTREAM a correr, eliminando quaisquer ficheiros FILESTREAM desnecessários.

Um contentor FILESTREAM não pode ser removido até que todos os ficheiros eliminados nele sejam limpos pelo GC. O GC FILESTREAM corre automaticamente. No entanto, se precisares de remover um contentor antes do GC estar a funcionar, podes usar sp_filestream_force_garbage_collection o GC manualmente.

Transact-SQL convenções de sintaxe

Syntax

sys.sp_filestream_force_garbage_collection
    [ [ @dbname = ] N'dbname' ]
    [ , [ @filename = ] N'filename' ]
[ ; ]

Arguments

[ @dbname = ] N'dbname'

Indica o nome da base de dados para executar o GC.

@dbname é sysname. Se não especificado, assume-se a base de dados atual.

[ @filename = ] N'nome do ficheiro'

Especifica o nome lógico do contentor FILESTREAM para executar o GC. @filename é opcional. Se não for especificado um nome lógico de ficheiro, o GC limpa todos os contentores FILESTREAM na base de dados especificada.

Valores de código de retorno

Value Description
0 Sucesso da operação
1 Falha operacional

Conjunto de resultados

Value Description
file_name Indica o nome do contentor FILESTREAM
num_collected_items Indica o número de itens FILESTREAM (ficheiros ou diretórios) que foram recolhidos (eliminados) neste contentor.
num_marked_for_collection_items Indica o número de itens FILESTREAM (ficheiros ou diretórios) que foram marcados para GC neste contentor. Estes itens ainda não foram eliminados, mas podem ser elegíveis para eliminação após a fase de GC.
num_unprocessed_items Indica o número de itens FILESTREAM elegíveis (ficheiros ou diretórios) que não foram processados para GC neste contentor FILESTREAM. Os itens podem estar por processar por várias razões, incluindo:

- Ficheiros que precisam de ser identificados porque não foi feito um backup de registo ou checkpoint.

- Ficheiros no modelo de recuperação COMPLETO ou BULK_LOGGED.

- Há uma transação ativa de longa duração.

- O trabalho do leitor de registo de replicação não foi executado. Consulte o white paper FILESTREAM Storage in SQL Server 2008 para mais informações.
last_collected_xact_seqno Retorna o último número de sequência de log correspondente (LSN) até ao qual os ficheiros foram recolhidos pelo contentor FILESTREAM especificado.

Remarks

Executa explicitamente a tarefa de recolha de lixo FILESTREAM até à conclusão na base de dados solicitada (e no contentor FILESTREAM). O processo de GC remove ficheiros que já não são necessários. O tempo necessário para esta operação ser concluída depende do tamanho dos dados do FILESTREAM nessa base de dados ou contentor e da quantidade de atividade DML que ocorreu recentemente nos dados do FILESTREAM. Embora esta operação possa ser executada com a base de dados online, pode afetar o desempenho da base de dados durante a sua execução devido a várias atividades de I/O realizadas pelo processo GC.

Note

Recomenda-se que esta operação seja realizada apenas quando necessário e fora do horário habitual.

Múltiplas invocações deste procedimento armazenado podem ser executadas simultaneamente apenas em contentores separados ou bases de dados separadas.

Devido a operações em duas fases, o procedimento armazenado deve ser executado duas vezes para realmente eliminar ficheiros FILESTREAM subjacentes.

A recolha de lixo baseia-se na truncação de log. Portanto, se os ficheiros foram eliminados recentemente numa base de dados usando o modelo completo de recuperação, só são recolhidos pelo lixo depois de fazer uma cópia de segurança do registo dessas partes do registo de transações, e a parte do registo ser marcada como inativa. Numa base de dados que utiliza o modelo simples de recuperação, ocorre um truncamento de logaritário após ter sido emitido a CHECKPOINT contra a base de dados.

Permissions

Requer a adesão ao papel de base de dados db_owner .

Examples

Os exemplos seguintes executam o GC para contentores FILESTREAM na fsdb base de dados.

A. Não especifique nenhum contentor

USE fsdb;
GO

EXECUTE sp_filestream_force_garbage_collection @dbname = N'fsdb';

B. Especificar um contentor

USE fsdb;
GO

EXECUTE sp_filestream_force_garbage_collection
    @dbname = N'fsdb',
    @filename = N'FSContainer';