Что показывает план выполнения SQL Server? - PullRequest
1 голос
/ 03 июня 2010

Существует следующий код:

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 .. Что происходит? Есть ли способ, как я могу определить в плане выполнения, которая является самой медленной частью запроса?

1 Ответ

2 голосов
/ 03 июня 2010

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

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

Edit:

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

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

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

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

...