Partilhar via


sys.sp_xtp_force_gc (Transact-SQL)

Aplica-se a: SQL Server

Faz com que o mecanismo na memória libere memória relacionada a linhas excluídas de dados na memória qualificadas para coleta de lixo, que ainda não foram liberadas pelo processo.

Nos casos em que um grande volume de dados na memória foi liberado e em que a memória não é necessária em breve para outros dados na memória, esse procedimento pode liberar memória para outros usos. Se você antecipar que a memória será usada em breve para outros dados na memória, liberá-la aqui causaria apenas sobrecarga extra, pois ela precisaria ser realocada para os novos dados.

Para obter mais informações sobre erros de memória de metadados do TempDB com otimização de memória, consulte Erros de memória de metadados do tempdb com otimização de memória (HkTempDB).

O sys.sp_xtp_force_gc procedimento armazenado do sistema foi introduzido no SQL Server 2022 (16.x) 1 e no SQL Server 2019 (15.x) 13. No momento, não há suporte para esse procedimento armazenado no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure.

Convenções de sintaxe de Transact-SQL

Sintaxe

sys.sp_xtp_force_gc
    [ [ @dbname = ] 'database_name' ]
[ ; ]

Argumentos

@dbname [ = ] 'database_name'

O banco de dados para liberar memória não utilizada para tabelas com otimização de memória. @dbname é sysname.

  • Quando o parâmetro @dname não é especificado, somente as estruturas de memória no nível do sistema na instância são consideradas.

  • Quando o parâmetro @dname fornecido é tempdb, as estruturas de memória relacionadas aos metadados tempdb com otimização de memória são afetadas.

  • Quando o parâmetro @dname fornecido é um banco de dados de usuário, as estruturas de memória relacionadas às tabelas com otimização de memória são afetadas.

Portanto, você pode esperar ver resultados diferentes ao executar sys.sp_xtp_force_gc: sem um parâmetro, com @dbname = N'tempdb', ou com @dbname = um nome de banco de dados de usuário.

Valores do código de retorno

0 para o sucesso. Diferente de zero para falha.

Permissões

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

Comentários

A coleta de lixo com otimização de memória ocorre normalmente e automaticamente em resposta à pressão de memória. Você pode acionar manualmente a coleta de lixo com sys.sp_xtp_force_gc. Você pode observar a redução na limpeza de memória em sys.dm_xtp_system_memory_consumers. No SQL Server 2022 (16.x), a sys.dm_xtp_system_memory_consumers exibição de gerenciamento dinâmico aprimorou os insights específicos para metadados tempdb com otimização de memória.

Compare com sys.sp_xtp_checkpoint_force_garbage_collection, que marca os arquivos de ponto de verificação usados na operação de mesclagem com o LSN (número de sequência de log) após o qual eles não são necessários e podem ser coletados como lixo. Além disso, sys.sp_xtp_checkpoint_force_garbage_collection move os arquivos cujo LSN associado é menor que o ponto de truncamento de log para a coleta de lixo FILESTREAM.

Antes do SQL Server 2022 (16.x), execute esse procedimento armazenado duas vezes.

Exemplos

Para executar a limpeza de lixo em estruturas de memória no nível do sistema e metadados TempDB com otimização de memória no SQL Server 2022 (16.x):

EXEC sys.sp_xtp_force_gc N'tempdb';
GO

EXEC sys.sp_xtp_force_gc;
GO

Para executar a limpeza de lixo em estruturas de memória no nível do sistema e metadados TempDB com otimização de memória antes do SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server 2022 (16.x)SQL Server

EXEC sys.sp_xtp_force_gc N'tempdb';
GO

EXEC sys.sp_xtp_force_gc N'tempdb';
GO

EXEC sys.sp_xtp_force_gc;
GO

EXEC sys.sp_xtp_force_gc;
GO