“访问检查缓存”服务器配置选项

适用于:SQL Server

通过 SQL Server访问数据库对象时,访问检查缓存在一个名为 访问检查结果缓存的内部结构中。 在可高速执行临时查询的 SQL Server 实例上,你可能会注意到 sys.dm_os_memory_cache_entries 视图中有许多类为 65535 的访问检查令牌条目。 类为 65535 的访问检查令牌条目表示特殊缓存条目。 这些缓存条目用于查询的累积权限检查。

例如,可以运行下列查询:select * from t1 join t2 join t3。 在这种情况下,SQL Server 计算此查询的累积权限检查。 此检查确定用户是否具有对 t1t2t3 的 SELECT 权限。 这些累积权限检查结果嵌入到访问检查令牌条目中,并插入 ID 为 65535 的访问检查缓存存储中。 如果同一用户多次重复使用或执行此查询,SQL Server 会重复使用访问检查令牌缓存条目一次。

若要优化此缓存的使用,应考虑使用各种查询参数化技术,或者将频繁的查询模式转换为使用存储过程。

“访问检查缓存桶计数”选项控制用于访问检查结果缓存的哈希桶的数目。

“访问检查缓存配额”选项控制访问检查结果缓存中存储的条目数。 如果达到最大条目数,则从访问检查结果缓存中删除最早的条目。

注解

默认值 0 表示 SQL Server 正在管理这些选项。 默认值转换为以下内部配置。

SQL Server 2016 (13.x) 及更高版本

服务器体系结构 默认条目数
访问检查缓存配额 X64 1,024
访问检查缓存桶计数 X64 256

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

  服务器体系结构 默认条目数
访问检查缓存配额 x86 1,024
x64 和 IA-64 28,192,048
访问检查缓存桶计数 x86 256
x64 和 IA-64 2,048

在极少数情况下,可以通过更改这些选项来提高性能。 例如,如果使用了太多内存,则可能希望减小访问检查结果缓存的大小。 或者,如果在重新计算权限时 CPU 使用率较高,则增加访问检查结果缓存的大小。

建议仅在有 Microsoft 客户支持服务部门提供指导的情况下才更改这些选项。 如果想要更改“访问检查缓存桶计数”和“访问检查缓存配额”的值,请使用 1:4 的比率。 例如,如果将“访问检查缓存桶计数”的值更改为 512,则应将“访问检查缓存配额”的值更改为 2048

另请参阅