Что показывает план выполнения SQL Server?

Есть следующий код:

declare @XmlData xml =
'<Locations>
<Location rid="1"/>
</Locations>'

declare @LocationList table (RID char(32));
insert into @LocationList(RID)
select Location.RID.value('@rid','CHAR(32)') 
from @XmlData.nodes('/Locations/Location') Location(RID)

insert into @LocationList(RID)
select A2RID from tblCdbA2

Таблица tblCdbA2 имеет 172810 строк.

Я выполнил пакет в SSMS с «Включить фактический план выполнения» и с запущенным Profiler.

План показывает, что стоимость первого запроса составляет 88% относительно пакета, а второго — 12%, но профилировщик говорит, что длительность первого и второго запроса составляет 17 мс и 210 мс соответственно, общее время — 229, что не соответствует действительности. 12 и 88.. Что происходит? Есть ли способ определить в плане выполнения, какая часть запроса является самой медленной?


person Timofey    schedule 03.06.2010    source источник


Ответы (1)


Продолжительность != стоимость.

Стоимость включает в себя другие факторы, такие как создание и освобождение объектов (например, XML Read с фильтром XPath), использование памяти, операции записи, чтения, доступ к временным таблицам и т. д.

Редактировать:

Посмотрите на свой план выполнения и наведите указатель мыши на те части, которые «стоят» больше всего. В вашем случае это «стоит» серверу (время компиляции, время процессора, время памяти и т. д.) больше всего для создания и выполнения функции чтения XML и фильтрации таблицы.

Еще одна вещь, которую можно попробовать, - это использовать профилировщик SQL Server и отслеживать события "Showplan All" и "Showplan XML". Вы можете получить те же представления, что и в плане выполнения, щелкнув событие «Showplan XML» в профилировщике, и получить дополнительные сведения, щелкнув событие «Showplan All».

Вот хорошая статья, в которой обсуждаются эти события:

Создание графических планов запросов с помощью SQL Server Profiler

person GalacticJello    schedule 03.06.2010
comment
отлично, но означает ли это, что стоимость ничего не говорит вам о том, плохой запрос или хороший? И есть ли способ определить в плане выполнения, какая часть запроса самая медленная? - person Timofey; 03.06.2010