sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)
適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體
傳回用來節流並行查詢優化之資源信號的目前狀態。
資料行 | 類型 | 描述 |
---|---|---|
pool_id | int | 資源管理員底下的資源集區標識碼 |
name | sysname | 編譯閘道名稱 (小型閘道、中型閘道、大型閘道) |
max_count | int | 並行編譯的最大設定計數 |
active_count | int | 此閘道中目前作用中的編譯計數 |
waiter_count | int | 此閘道中的等候者數目 |
threshold_factor | bigint | 定義查詢優化所使用記憶體最大部分的臨界值因數。 針對小型閘道,threshold_factor表示一個查詢的最大優化器記憶體使用量,然後才需要在小型閘道中取得存取權。 針對中型和大型閘道,threshold_factor顯示此閘道可用的伺服器記憶體總數部分。 計算閘道的記憶體使用量臨界值時,它會當做除數。 |
threshold | bigint | 下一個臨界值記憶體,以位元組為單位。 如果此閘道的記憶體耗用量達到此臨界值,則需要查詢才能取得此閘道的存取權。 如果查詢不需要取得此閘道的存取權,則為 “-1”。 |
is_active | bit | 是否需要查詢才能傳遞目前的閘道。 |
權限
SQL Server 需要伺服器上的 VIEW SERVER STATE 許可權。
Azure SQL 資料庫 需要資料庫中的 VIEW DATABASE STATE 許可權。
SQL Server 2022 和更新版本的權限
需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。
備註
SQL Server 會使用階層式閘道方法來節流允許的並行編譯數目。 使用三個閘道,包括小型、中型和大型閘道。 閘道可協助防止大型編譯記憶體需求取用者耗盡整體記憶體資源。
等候閘道導致編譯延遲。 除了編譯延遲之外,節流要求也會有相關聯的RESOURCE_SEMAPHORE_QUERY_COMPILE等候類型累積。 RESOURCE_SEMAPHORE_QUERY_COMPILE等候類型可能表示查詢會使用大量的記憶體進行編譯,而且記憶體已用盡,或者有足夠記憶體可供整體使用,但特定網關中的可用單位已用盡。 sys.dm_exec_query_optimizer_memory_gateways的輸出可用來針對記憶體不足而無法編譯查詢執行計劃的案例進行疑難解答。
範例
A. 檢視資源信號的統計數據
此 SQL Server 實例目前的優化器記憶體閘道統計數據為何?
SELECT [pool_id], [name], [max_count], [active_count],
[waiter_count], [threshold_factor], [threshold],
[is_active]
FROM sys.dm_exec_query_optimizer_memory_gateways;
另請參閱
動態管理檢視和函數 (Transact-SQL)
執行相關的動態管理檢視和函數 (Transact-SQL)
如何使用 DBCC MEMORYSTATUS 命令監視 SQL Server 2005大型查詢編譯等候 SQL Server 2014 中RESOURCE_SEMAPHORE_QUERY_COMPILE的記憶體使用量