服务器配置:访问检查缓存
适用范围: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 计算此查询的累积权限检查。 此检查确定用户是否具有对 t1
、t2
和 t3
的 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 count
和 access check cache quota
值,请使用 1:4 比率。 例如,如果将 access check cache bucket count
值更改为 512
,则应将 access check cache quota
值更改为 2048
。