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 托管实例目前不支持此存储过程。
语法
sys.sp_xtp_force_gc
[ [ @dbname = ] 'database_name' ]
[ ; ]
参数
[ @dbname = ] 'database_name'
要释放内存优化表未使用的内存的数据库。 @dbname 为 sysname。
如果未指定@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