服务器配置:访问检查缓存

适用范围:SQL Server

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

例如,可以运行下列查询:

SELECT *
FROM t1
INNER JOIN t2
INNER JOIN t3;

在这种情况下,SQL Server 计算此查询的累积权限检查。 此检查确定用户是否具有对 t1t2t3 的 SELECT 权限。 这些累积权限检查结果嵌入到访问检查令牌条目中,并插入 ID 为 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

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

建议仅在有 Microsoft 客户支持服务部门提供指导的情况下才更改这些选项。 如果想要更改 access check cache bucket countaccess check cache quota 值,请使用 1:4 比率。 例如,如果将 access check cache bucket count 值更改为 512,则应将 access check cache quota 值更改为 2048