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參數時,只會考慮 實例中的系統層級記憶體結構。
當提供的@dname參數為
tempdb
時,與記憶體優化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 之前於系統層級記憶體結構和記憶體優化的 TempDB 元數據上執行垃圾清除(16.x):
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