在没有 VIEW SERVER STATE 权限的情况下查找 SQL Server 2014 中最常访问的表

Find most frequently accessed tables in SQL Server 2014 without VIEW SERVER STATE permission

我正在尝试使用此查询来获取数据库中最常访问的表:

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 服务器中的工具)可以在不需要此权限的情况下获得相同或相似的结果?

你也可以使用这个:

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 权限)。

但是,此查询与您的查询 return 不同。在此处查看差异:http://web.archive.org/web/20180410202012/http://sqlblog.com:80/blogs/paul_white/archive/2011/02/17/Seeking-Without-Indexes.aspx