分享方式:


伺服器組態:存取檢查快取

適用於:SQL Server

當資料庫物件是由 SQL Server 所存取時,存取檢查會在稱為 access check result cache 的內部結構中進行快取。 在具有高速特定查詢執行的 SQL Server 執行個體上,您可能會注意到 sys.dm_os_memory_cache_entries 檢視中有許多具有 65535 類別的存取檢查權杖項目。 具有 65535 類別的存取檢查權杖項目代表特殊快取項目。 這些快取項目可用於查詢的累積權限檢查。

例如,您可以執行下列查詢:

SELECT *
FROM t1
INNER JOIN t2
INNER JOIN t3;

在此情況下,SQL Server 會計算此查詢的累積權限檢查。 此檢查會判斷使用者是否有 t1t2t3 的 SELECT 權限。 這些累積權限檢查結果會內嵌於存取檢查權杖項目,並插入識別碼為 65535 的存取檢查快取存放區。 如果同一位使用者重複使用或執行此查詢多次,SQL Server 會重複使用存取檢查權杖快取項目一次。

若要最佳化此快取的使用,您應該考慮使用各種查詢參數化技術,或將頻繁的查詢模式轉換成使用預存程序。

access check cache bucket count 選項可控制用於存取檢查結果快取的雜湊貯體數目。

access check cache quota 選項可控制儲存在存取檢查結果快取中的項目數。 達到最大項目數時,會從存取檢查結果快取中移除最舊的項目。

備註

預設值 0 表示 SQL Server 正在管理這些選項。 預設值會轉譯為下列內部組態。

僅限 SQL Server 2016 (13.x) 及更新版本

組態設定 伺服器架構 預設項目數
access check cache quota x64 1,024
access check cache bucket count x64 256

SQL Server 2008 (10.x) 到 SQL Server 2014 (12.x)

組態設定 伺服器架構 預設項目數
access check cache quota x86 1,024
x64 和 IA-64 28,192,048
access check cache bucket count x86 256
x64 和 IA-64 2,048

在罕見的情況下,效能或許可以透過變更這些選項的方式來提升。 例如,如果使用太多記憶體,您可能想要減少 access check result cache 的大小。 或者,如果在重新計算權限時出現高 CPU 使用率,請增加 access check result cache 的大小。

建議只在 Microsoft 客戶支援服務引導下變更這些選項。 如果您想要變更 access check cache bucket countaccess check cache quota 值,請使用 1:4 的比。 例如,如果您將 access check cache bucket count 值變更為 512,則應該將 access check cache quota 值變更為 2048