sp_filestream_force_garbage_collection (Transact-SQL)
Aplica-se: SQL Server
Força o coletor de lixo (GC) FILESTREAM a ser executado, excluindo todos os arquivos FILESTREAM desnecessários.
Um contêiner FILESTREAM não pode ser removido até que todos os arquivos excluídos dentro dele sejam limpos pelo GC. O FILESTREAM GC é executado automaticamente. No entanto, se você precisar remover um contêiner antes que o GC seja executado, poderá usar sp_filestream_force_garbage_collection
para executar o GC manualmente.
Convenções de sintaxe de Transact-SQL
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 GC será executado.
@dbname é sysname. Se não for especificado, o banco de dados atual será assumido.
@filename [ = ] 'logical_file_name'
Especifica o nome lógico do contêiner FILESTREAM no qual o GC será executado. @filename é opcional. Se nenhum nome de arquivo lógico for especificado, o GC 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 |
Conjunto 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 ou diretórios) que foram coletados (excluídos) neste contêiner. |
num_marked_for_collection_items |
Indica o número de itens FILESTREAM (arquivos ou diretórios) que foram marcados para GC neste contêiner. Esses itens ainda não foram excluídos, mas podem estar qualificados para exclusão após a fase de GC. |
num_unprocessed_items |
Indica o número de itens FILESTREAM qualificados (arquivos ou diretórios) que não foram processados para GC neste contêiner FILESTREAM. Os itens podem não ser processados por vários motivos, incluindo: - Arquivos que precisam ser fixados porque um backup de log ou ponto de verificação não foi feito. - Arquivos no modelo de recuperação FULL ou BULK_LOGGED. - Há uma transação ativa de longa duração. - O trabalho do leitor de log de replicação não foi executado. Consulte o white paper Armazenamento FILESTREAM 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 de coleta de lixo FILESTREAM até a conclusão no banco de dados solicitado (e no contêiner FILESTREAM). O processo de GC remove arquivos que não são mais necessários. O tempo necessário para que essa operação seja concluída depende do tamanho dos dados FILESTREAM nesse banco de dados ou contêiner e da quantidade de atividade DML que ocorreu recentemente nos dados FILESTREAM. Embora essa 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 GC.
Observação
Recomenda-se que essa operação seja executada somente quando necessário e fora do horário normal de operação.
É possível executar várias invocações desse procedimento armazenado simultaneamente em contêineres ou em bancos de dados separados.
Devido às operações de duas fases, o procedimento armazenado deve ser executado duas vezes para realmente excluir os arquivos FILESTREAM subjacentes.
A coleta de lixo 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 coletados como lixo 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 a 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 GC para contêineres FILESTREAM no fsdb
banco de dados.
R. Não especificar nenhum contêiner
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';
B. Especificar um contêiner
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
@filename = N'FSContainer';