在没有 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
我正在尝试使用此查询来获取数据库中最常访问的表:
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