Самый быстрый способ определения наиболее часто используемых вариантов хранимых процедур в SQL Server 2005

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

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

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

9
задан SQLMenace 17 August 2010 в 18:47
поделиться

4 ответа

Это даст вам 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

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

15
ответ дан 4 December 2019 в 12:57
поделиться

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

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

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

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

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

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

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

1
ответ дан 4 December 2019 в 12:57
поделиться

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

0
ответ дан 4 December 2019 в 12:57
поделиться

Мне нравится этот фрагмент кода для отката и просмотра статистики выполнения. и кэшированный план запроса для данной хранимой процедуры. В 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
ответ дан 4 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: