在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表
Posted
技术标签:
【中文标题】在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表【英文标题】:Find most frequently accessed tables in SQL Server 2014 without VIEW SERVER STATE permission 【发布时间】:2021-12-16 09:26:14 【问题描述】:我正在尝试使用此查询来获取数据库中访问频率最高的表:
SELECT t.NAME AS tname,
SUM(ius.user_seeks + ius.user_scans + ius.user_lookups) AS accesses
FROM db_name.sys.dm_db_index_usage_stats ius
INNER JOIN db_name.sys.tables t ON t.OBJECT_ID = ius.object_id
GROUP BY database_id, t.name
ORDER BY accesses DESC
但它失败并出现错误
Msg 300, Level 14, State 1, Line 1
VIEW SERVER STATE permission was denied on object 'server', database 'master'.
可以理解,我们的后端托管公司不想将 VIEW SERVER STATE 权限授予任何随机实习生。是否有无需此权限即可获得相同或相似结果的查询(或 SQL Server 中的工具)?
【问题讨论】:
【参考方案1】:你也可以这样用:
SELECT t.name, range_scan_count+singleton_lookup_count AS accesses, *
FROM sys.dm_db_index_operational_stats(db_id(),NULL,NULL,NULL) os
INNER JOIN sys.tables t ON t.object_id = os.object_id
ORDER BY accesses DESC
这应该与VIEW DATABASE STATE
权限一起使用(即使您没有VIEW SERVER STATE
权限)。
但是,此查询返回的内容与您的查询不同。在此处查看差异:http://web.archive.org/web/20180410202012/http://sqlblog.com:80/blogs/paul_white/archive/2011/02/17/Seeking-Without-Indexes.aspx
【讨论】:
以上是关于在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表的主要内容,如果未能解决你的问题,请参考以下文章
错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )
错误记录手机应用无法联网 ( 添加 READ_PRIVILEGED_PHONE_STATE 权限导致手机应用网络不可用 )