высокий 'total_worker_time' для сохраненного процесса с использованием OPENQUERY в SQL Server 2005 - PullRequest
0 голосов
/ 24 января 2012

[Кросс опубликован с сайта администраторов баз данных, в надежде, что он может получить лучшую тягу здесь.Я обновлю любой из этих сайтов соответствующим образом.]

У меня есть хранимая процедура в SQL Server 2005 (SP2), которая содержит один запрос, подобный следующему (упрощенный для ясности)

SELECT * FROM OPENQUERY(MYODBC, 'SELECT * FROM MyTable WHERE Option = ''Y'' ')
OPTION (MAXDOP 1) 

Когда этот процесс запускается (и запускается только один раз), я вижу, что план отображается в sys.dm_exec_query_stats с высоким значением total_worker_time (например, 34762,196 мс).Это близко к прошедшему времени.Тем не менее, в SQL Management Studio статистика показывает гораздо меньшее время процессора, как и следовало ожидать (например, 6828 мс).Для возврата запроса требуется некоторое время из-за медлительности сервера, с которым он обращается, но он не возвращает много строк.

Мне известно о проблеме, которую могут выполнять параллельные запросы в SQL Server 2005настоящее странное время процессора, именно поэтому я попытался отключить любой парализм с подсказкой запроса (хотя я действительно не думаю, что это было в любом случае).

Я не знаю, какчтобы учесть тот факт, что два взгляда на использование ЦП могут различаться, а также то, какой из них может быть точным (у меня есть другие причины полагать, что использование ЦП может быть выше, но это сложно измерить).Кто-нибудь может дать мне управление?

ОБНОВЛЕНИЕ : Я предполагал, что проблема была в OPENQUERY, поэтому я пытался время от времени искать длительный запрос, который не использует OPENQUERY.В этом случае статистика (полученная установкой STATISTICS TIME ON) показала, что время ЦП равно 3315 мс, а DMV - 0,511 мс.Общее время, прошедшее в каждом случае, согласовано.

1 Ответ

0 голосов
/ 25 января 2012

total_worker_time в sys.dm_exec_query_stats является кумулятивным - это общее время выполнения для всех выполнений текущей скомпилированной версии запроса - количество * представлений, которое это представляет, см. execution_count.

См. last_worker_time, min_worker_time или max_worker_time для определения времени отдельных казней.

ссылка: http://msdn.microsoft.com/en-us/library/ms189741.aspx

...