Самый быстрый способ определить наиболее часто используемые варианты хранимых процедур в SQL Server 2005 - PullRequest
9 голосов
/ 17 августа 2010

Я пытаюсь выяснить, есть ли способ идентифицировать «версию» SP, которая вызывается чаще всего.У меня есть SP, который вызывается с кучей разных параметров.Я знаю, что SP вызывает некоторые проблемы и пытается определить проблему.Помимо захвата вызовов к SP и ручного просмотра результатов, возможно ли использовать профилировщик для группировки вызовов SP по предоставленным параметрам?

Я не DB (A / E), просто веб-разработчик, поэтому любые намеки / точки в правильном направлении будут полезны.Спасибо!

РЕДАКТИРОВАТЬ: Перекомпиляция SP не очень помогает.

Ответы [ 4 ]

15 голосов
/ 17 августа 2010

Это даст вам 50 наиболее часто используемых процедур и операторов в процедурах, отсюда: Отображение 50 наиболее используемых хранимых процедур в SQL Server

SELECT TOP 50 * FROM(SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName,
  execution_count,s2.objectid,
    (SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset / 2+1 ,
      ( (CASE WHEN statement_end_offset = -1
  THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2)
ELSE statement_end_offset END)- statement_start_offset) / 2+1)) AS sql_statement,
       last_execution_time
FROM sys.dm_exec_query_stats AS s1
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 ) x
WHERE sql_statement NOT like 'SELECT * FROM(SELECT coalesce(object_name(s2.objectid)%'
and OBJECTPROPERTYEX(x.objectid,'IsProcedure') = 1
and exists (SELECT 1 FROM sys.procedures s
WHERE s.is_ms_shipped = 0
and s.name = x.ProcName )
ORDER BY execution_count DESC

Посетите этотссылка, чтобы получить запрос только для имени процесса, но я думаю, что это лучший запрос, так как он дает вам утверждения в процессах также

1 голос
/ 17 августа 2010

Похоже, вам нужно только получить эту информацию в течение короткого периода времени.В течение этого периода sproc может вызываться большое количество раз, но это конечный период.

Если это так, возможно, вы могли бы где-нибудь регистрировать вызовы sproc?Если у вас есть контроль над sproc-кодом, вы можете выполнить регистрацию там.Один из подходов состоит в том, чтобы создать специальную таблицу для этой цели, добавить INSERT в эту таблицу в начале или конце существующего sproc и подождать, пока некоторые записи накопятся в таблице .

В зависимости от особенностей, вы можете создать столбец в пользовательской таблице регистрации для каждого параметра sproc.

Тогда у вас будет достаточно информации об использовании sproc за период времени, в течение которого вы ведете запись.

Учитывая данные, накопленные в таблице, вы можете запросить, чтобы найтинаиболее частые значения параметров, которые включают пользователи, приложения, веб-страницы и т. д., даты и время начала и окончания вызова sproc и все, что вы регистрируете.

Это не повлечет за собой каких-либо изменений в коде приложения, и оно может быть полностью устранено после завершения устранения неполадок.Таким образом, кроме неизбежного снижения производительности всех этих журналов, цена этого подхода невысока.

Редактировать: этот подход будет альтернативой для пользователей, у которых нет специальных разрешений, необходимых для выполнения запросов DMV к таблицамтакие как sys.dm_exec_query_stats.Во многих магазинах получение таких разрешений, особенно для производственных баз данных, не представляется возможным для разработчиков.

0 голосов
/ 17 августа 2010

Мне нравится этот фрагмент кода для отката и просмотра статистики выполнения. и план кэшированных запросов для данной хранимой процедуры. В Management Studio вы можете нажать на XML, возвращенный в столбце «query_plan», чтобы просмотреть графическую версию плана выполнения.

SELECT qp.*,qs.*,st.text
    FROM sys.dm_exec_query_stats qs 
        CROSS APPLY sys.dm_exec_sql_text(sql_handle) st
        CROSS APPLY sys.dm_exec_query_plan(plan_handle) qp
    WHERE st.objectid= object_id('YourStoredProcedureName')
0 голосов
/ 17 августа 2010

Если вы знаете, какой SP вызывает проблемы, не могли бы вы просто записать параметры, переданные ему из этого SP?Вы можете настроить таблицу со списком параметров, затем записать их вместе со временем, которое потребовалось для выполнения процедуры, а затем запросить эту таблицу, чтобы увидеть, какие параметры вызывают худшую производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...