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'

要釋放記憶體優化數據表未使用記憶體的資料庫。 @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