sys.sp_xtp_force_gc (Transact-SQL)

适用于SQL Server

导致内存中引擎释放与已删除的内存中数据行相关的内存,这些行符合垃圾回收条件,该行尚未由进程释放。

如果释放了大量内存中数据,并且其他内存数据不需要内存,则此过程可以释放内存以供其他使用。 如果预计内存即将用于其他内存中数据,请在此处释放内存只会造成额外的开销,因为需要重新分配新数据。

有关内存优化 TempDB 元数据内存不足错误的详细信息,请参阅 内存优化 tempdb 元数据(HkTempDB)内存不足错误

系统sys.sp_xtp_force_gc存储过程是在 SQL Server 2022 (16.x) CU 1 和 SQL Server 2019 (15.x) CU 13 中引入的。 Azure SQL 数据库和Azure SQL 托管实例目前不支持此存储过程。

Transact-SQL 语法约定

语法

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

参数

[ @dbname = ] 'database_name'

要释放内存优化表未使用的内存的数据库。 @dbnamesysname

  • 如果未指定@dname参数,则仅考虑实例中的系统级内存结构。

  • 提供tempdb@dname参数时,与内存优化 tempdb 元数据相关的内存结构将受到影响。

  • 当提供的@dname参数是用户数据库时,内存结构相关的内存优化表将受到影响。

因此,在执行时 sys.sp_xtp_force_gc可能会看到不同的结果:不使用参数、带 @dbname = N'tempdb'或用户名 @dbname =

返回代码值

0 成功。 非零表示失败。

权限

要求具有 db_owner 固定数据库角色中的成员资格。

注解

内存优化垃圾回收正常进行,并自动响应内存压力。 可以使用 .. 手动触发垃圾回收 sys.sp_xtp_force_gc。 可以观察sys.dm_xtp_system_memory_consumers内存清理的减少。 在 SQL Server 2022(16.x)中 sys.dm_xtp_system_memory_consumers ,动态管理视图改进了特定于 内存优化 tempdb 元数据的见解。

sys.sp_xtp_checkpoint_force_garbage_collection形成对比,它将合并操作中使用的检查点文件与日志序列号(LSN)一起标记,之后不需要它们,并且可以进行垃圾回收。 此外, sys.sp_xtp_checkpoint_force_garbage_collection 将关联的 LSN 低于日志截断点的文件移动到 FILESTREAM 垃圾回收。

在 SQL Server 2022(16.x)之前,请执行此存储过程两次。

示例

若要在 SQL Server 2022 中对系统级内存结构和内存优化 TempDB 元数据执行垃圾清理(16.x):

EXEC sys.sp_xtp_force_gc N'tempdb';
GO

EXEC sys.sp_xtp_force_gc;
GO

若要在 SQL Server 2022(16.x)之前对系统级内存结构和内存优化 TempDB 元数据执行垃圾清理,

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