我正在尝试查询 SQL Server 2008 R2 中的 DMV。
在这台服务器上有两个名为histrx和OpenLink的用户数据库。为了证明我的名字是正确的:
select db_id('histrx') -- Returns 5
select db_id('OpenLink') -- Returns 7
如果我运行以下查询,为histrx数据库挑选条目,我会在结果集中得到 25 行:
select top 25
total_worker_time/execution_count as avg_worker_time,
total_logical_reads/execution_count as avg_logical_reads,
db_name(s.dbid) as [db_name],
object_name(s.objectid, s.dbid) as [object_name],
execution_count,
plan_generation_num,
last_execution_time,
creation_time,
[text],
p.query_plan
from
sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) s
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) p
where
db_name(s.dbid) = 'histrx'
order by
avg_logical_reads desc
如果我将where
子句更改为以下内容,则不会返回任何行:
where
db_name(s.dbid) = 'OpenLink'
我知道OpenLink数据库上有大量活动。如果我在活动监视器中查看最近的昂贵查询,我可以看到OpenLink的条目,我很确定这是使用下面的 DMV。
- 我在同一登录下运行活动监视器和 DMV 查询
- 该登录名是OpenLink数据库的所有者
- 如果我运行,
select * from fn_my_permissions (NULL, 'server');
那么我可以看到我有VIEW SERVER STATE权限 - 如果我删除该
where
子句,我会看到其他数据库的条目,例如msdb和distribution - 这是我的登录映射的屏幕截图。我很确定我不应该是所有者,但这是一个不同的问题。
谁能告诉我为什么我的 DMV 查询为此数据库返回零行?