首页 > 解决方案 > SQL Server 中的大型 USERSTORE_OBJPERM

问题描述

我试图让我们的 SQL Server 运行得更快,并且注意到没有存储过程在计划缓存中停留任何时间长度。大多数计划都是在最后一个小时左右创建的。

运行下面的脚本,我看到 USERSTORE_OBJPERM 大约为 3GB,是服务器上仅次于 SQL BUFFERPOOL 的第二大内存缓存。

选择前 100 个 * FROM sys.dm_os_memory_clerks 其中 type = 'USERSTORE_OBJPERM'

我已经在我们的其他一些生产服务器上运行了相同的脚本,其他服务器上的 USERSTORE_OBJPERM 都没有接近 200MB 左右那么大。

我的问题是有没有人看到大约 3GB 的 USERSTORE_OBJPERM 以及可能导致它的原因。

我运行以下命令尝试清除缓存,它下降了 100mb 左右,然后又立即开始上升。DBCC FREESYSTEMCACHE ('ObjPerm - DatabaseName')

脚本结果

SQL Server 版本是应用了 CU22 的 2017 Enterprise。

非常感谢您提供的任何提示或建议 Cheers Mat

标签: sql-serversql-server-2017

解决方案


固定的。

看来问题是由使用服务代理的应用程序引起的。

该应用程序正在运行一个脚本以每 30 秒检查一次权限。

幸运的是,有一个选项可以关闭权限检查。

USERSTORE_OBJPERM 缓存大小现在是 200MB,而不是 3GB,并且存储过程计划保留在缓存中。


推荐阅读