Я исправляю проблемы с производительностью хранимой процедуры с несколькими состояниями в SQL Server. Я хочу знать, на какие части я должен тратить время.
Я понимаю, как читать Query Cost, и всегда ли это процент? что даже когда SSMS предписано включить фактический план выполнения , показатели «Стоимость запроса (относительно пакета)» все еще основаны на оценочных значениях , которые могут быть далеки от фактических
Из измерения производительности запросов: «Стоимость запроса плана выполнения» и «Время, затраченное на выполнение» я понимаю, что я могу окружить вызов хранимой процедуры SET STATISTICS TIMEинструкциями, и тогда я получу такой список на Messagesпанели:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
[etc]
SQL Server Execution Times:
CPU time = 187 ms, elapsed time = 206 ms.
с одним выходным сообщением для каждого оператора.
Я могу «легко» (хотя и не удобно) связать вывод статистики времени с планами выполнения «оператор за оператором» на панели плана выполнения, посчитав их: четвертый SQL Server Execution Timesвывод сообщения соответствует на Query 4панели плана выполнения и т. Д.
Но есть ли лучший способ?
DurationиCPUрезультаты являются фактическими, а не оценочными значениями, да?