Есть ли альтернатива SET STATISTICS TIME, которая также показывает утверждения? - PullRequest
0 голосов
/ 25 мая 2018

Оператор SET STATISTICS TIME полезен только при разработке, так как с его помощью можно настроить производительность дополнительного оператора, добавляемого в запрос или над UDF / SP, над которым выполняется работа.Однако, когда необходимо выполнить настройку существующего кода, например, SP с сотнями или тысячами строк кода, вывод этого оператора является совершенно бесполезным, поскольку неясно, к какому SQL-выражению относится записанное время.

Нет ли альтернативы SET STATISTICS TIME, которые также показывают утверждения, к которым относится записанное время?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Я бы порекомендовал использовать расширенный инструмент.Вот пример одного вызова sp со всеми и всеми внутренними деталями.Справа у вас есть различные истории запусков, которые можно прокомментировать и проанализировать позже.Все, что вам нужно для статистики / использования индекса / io / ждет - все доступно на разных вкладках.Использование: SentryOne Plan Explorer (бесплатно).

enter image description here

0 голосов
/ 26 мая 2018

Я бы создал расширенный сеанс событий, подобный показанному ниже:

CREATE EVENT SESSION [proc_statments] ON SERVER 
ADD EVENT sqlserver.module_end(
    WHERE ([object_name]=N'usp_foobar')
),
ADD EVENT sqlserver.sp_statement_completed(
    SET collect_object_name=(1),collect_statement=(1)
    WHERE ([object_name]=N'usp_foobar'))
ADD TARGET package0.event_file(SET filename=N'proc_statments')
WITH (TRACK_CAUSALITY=ON)
GO

Это отслеживает завершение хранимой процедуры и оператора хранимой процедуры для процедуры, называемой usp_foobar.Внутри самого события есть идентификатор, который помогает вам связать воедино, какие операторы были выполнены в результате выполнения определенной процедуры (для этого TRACK_CAUSALITY).

0 голосов
/ 25 мая 2018

Если ваши хранимые процедуры гранулированы, вы можете использовать это DMV, чтобы получить представление о времени.

SELECT 
    DB_NAME(qs.database_id) AS DBName
    ,qs.database_id
    ,qs.object_id
    ,OBJECT_NAME(qs.object_id,qs.database_id) AS ObjectName
    ,qs.cached_time
    ,qs.last_execution_time
    ,qs.plan_handle
    ,qs.execution_count
    ,total_worker_time
    ,last_worker_time
    ,min_worker_time
    ,max_worker_time
    ,total_physical_reads
    ,last_physical_reads
    ,min_physical_reads
    ,max_physical_reads
    ,total_logical_writes
    ,last_logical_writes
    ,min_logical_writes
    ,max_logical_writes
    ,total_logical_reads
    ,last_logical_reads
    ,min_logical_reads
    ,max_logical_reads
    ,total_elapsed_time
    ,last_elapsed_time
    ,min_elapsed_time
    ,max_elapsed_time
FROM 
    sys.dm_exec_procedure_stats qs
...