sp_filestream_force_garbage_collection (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis)

Força a execução do coletor de lixo FILESTREAM, excluindo qualquer arquivo FILESTREAM desnecessário.

Não é possível remover um contêiner FILESTREAM antes que o coletor de lixo limpe todos os arquivos excluídos contidos nele. O coletor de lixo FILESTREAM é executado automaticamente. No entanto, se você precisar remover um contêiner antes que o coletor de lixo seja executado, poderá usar o sp_filestream_force_garbage_collection para executar o coletor de lixo manualmente.

Sintaxe

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

Argumentos

[ @dbname = ] 'database_name'
Significa o nome do banco de dados no qual o coletor de lixo será executado.

Observação

@dbname é sysname. Se não for especificado, o banco de dados atual será presumido.

[ @filename = ] 'logical_file_name'
Especifica o nome lógico do contêiner FILESTREAM no qual o coletor de lixo será executado. @filename é opcional. Se nenhum nome de arquivo lógico for especificado, o coletor de lixo limpará todos os contêineres FILESTREAM no banco de dados especificado.

Valores do código de retorno

Valor Descrição
0 Êxito na operação
1 Falha na operação

Conjuntos de resultados

Valor Descrição
file_name Indica o nome de contêiner FILESTREAM
num_collected_items Indica o número de itens FILESTREAM (arquivos/diretórios) que foram limpos (excluídos) pelo coletor de dados neste contêiner.
num_marked_for_collection_items Indica o número de itens FILESTREAM (arquivos/diretórios) que foram marcados para coleta de lixo neste contêiner. Esses itens ainda não foram excluídos, mas podem ser qualificados para exclusão após a fase de coleta de lixo.
num_unprocessed_items Indica o número de itens FILESTREAM qualificados (arquivos ou diretórios) que não foram processados para coleta de lixo neste FILESTREAM. Itens podem não ser processados por várias razões, inclusive as seguintes:

Arquivos que precisam ser definidos porque não foi obtido o backup de log ou um ponto de verificação.

Arquivos no modelo de recuperação FULL ou BULK_LOGGED.

Há uma transação ativa de execução longa.

O trabalho de leitor de log de replicação não foi executado. Consulte o white paper filestream Armazenamento no SQL Server 2008 para obter mais informações.
last_collected_xact_seqno Retorna o número de sequência de log correspondente (LSN) até onde os arquivos do contêiner FILESTREAM especificado foram coletados pelo coletor de lixo.

Comentários

Executa explicitamente a tarefa Coletor de lixo FILESTREAM até a conclusão no banco de dados solicitado (e no contêiner FILESTREAM). Arquivos que não são mais necessários são removidos pelo processo de coleta de lixo. O tempo necessário para que essa operação seja concluída depende do tamanho dos dados FILESTREAM no banco de dados ou contêiner, bem como a quantidade de atividades de DML ocorridas recentemente nos dados FILESTREAM. Embora esta operação possa ser executada com o banco de dados online, isso pode afetar o desempenho do banco de dados durante sua execução devido a várias atividades de E/S feitas pelo processo de coleta de lixo.

Observação

É recomendado que esta operação apenas seja executada quando necessário e fora de horas de operação habituais.

É possível executar várias invocações desse procedimento armazenado simultaneamente em contêineres ou em bancos de dados separados.

Devido a operações de duas fases, o procedimento armazenado deve ser executado duas vezes para realmente excluir arquivos filestream subjacentes.

A Coleta de Lixo (GC) depende do truncamento de log. Portanto, se os arquivos foram excluídos recentemente em um banco de dados usando o modelo de Recuperação Completa, eles serão armazenados em GC somente depois que um backup de log dessas partes do log de transações for feito e a parte do log for marcada como inativa. Em um banco de dados que usa o modelo de recuperação Simples, um truncamento de log ocorre depois que um CHECKPOINT é emitido no banco de dados.

Permissões

Requer associação na função de banco de dados db_owner.

Exemplos

Os exemplos a seguir executam o coletor de lixo para contêineres FILESTREAM no banco de dados FSDB.

a. Não especificando nenhum contêiner

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

B. Especificando um contêiner

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

Consulte Também

Filestream
Filetables
Exibições de gerenciamento dinâmico de fluxo de arquivos e FileTable (Transact-SQL)
Exibições de catálogo de fluxo de arquivos e FileTable (Transact-SQL)
sp_kill_filestream_non_transacted_handles (Transact-SQL)