Compartilhar via


sp_filestream_force_garbage_collection (Transact-SQL)

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. Porém, se você precisar remover um contêiner antes da execução do coletor de lixo, você poderá usar sp_filestream_force_garbage_collection para executá-lo 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çãoObservação

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

  • @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 de código de retorno

Value

Descrição

0

Êxito na operação

1

Falha na operação

Conjuntos de resultados

Value

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. Estes itens ainda não foram excluídos, mas podem se qualificar 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 do leitor de log de replicação não foi executado. Consulte o white paper Armazenamento de 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 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çãoObservaçã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.

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

Outros recursos

Armazenamento de FILESTREAM no SQL Server 2008