Я пытаюсь запросить DMV в 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 и раздачи ион - Вот скриншот сопоставлений для моего входа. Я почти уверен, что не должен быть владельцем, но это другой вопрос.
Может кто-нибудь сказать мне, почему мой DMV запрос возвращает нулевое количество строк для этой базы данных?
Спасибо за подробное объяснение; ваше решение работает отлично. –