[Кросс опубликован с сайта администраторов баз данных, в надежде, что он может получить лучшую тягу здесь.Я обновлю любой из этих сайтов соответствующим образом.]
У меня есть хранимая процедура в 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 мс.Общее время, прошедшее в каждом случае, согласовано.