Профилирование SQL Server, как я должен идти об этом? - PullRequest
5 голосов
/ 27 октября 2010

Итак, я раньше использовал SQL Profiler , и я знаю, как я могу видеть, что мои LINQ-запросы делают за кулисами.Сейчас мы находимся в процессе выявления запросов, которые могут занять больше времени и должны быть оптимизированы или иметь некоторую индексацию.

Итак, теперь, когда я просматриваю свои запросы LINQ в профилировщике, выполняющем его рядом, появляется много других данных и запросов, которые меня не волнуют.Есть ли так или иначе профилировщик или некоторые другие инструменты, которые могли бы сортировать запросы в порядке наибольшего времени ... так что я буду работать над его оптимизацией.Я хочу запустить свое приложение и затем каким-то образом увидеть в профилировщике худшие запросы из множества.

Может кто-нибудь направить или направить меня к чему-то более полезному, пытаясь выполнить профилирование с SQL Server 2005. Также любые идеиили предложения или лучшие способы о профилировании приветствуются.Спасибо.

Ответы [ 3 ]

3 голосов
/ 27 октября 2010

Вот запрос к DMV, в котором будут перечислены запросы с некоторыми подробностями о времени процессора. Как только вы укажете запрос, запустите его с установленным Include Actual Execution Plan, чтобы увидеть поток запросов и где вам может потребоваться индексирование.

select  
    highest_cpu_queries.plan_handle,  
    highest_cpu_queries.total_worker_time, 
    q.[text] 
from  
    (select top 50  
        qs.plan_handle,  
        qs.total_worker_time 
    from  
        sys.dm_exec_query_stats qs 
    order by qs.total_worker_time desc) as highest_cpu_queries 
    cross apply sys.dm_exec_sql_text(plan_handle) as q 
order by highest_cpu_queries.total_worker_time desc

Вот хорошая статья о поиске проблем с производительностью.

2 голосов
/ 27 октября 2010

для «быстрого и грязного» списка худших запросов, вы можете просто использовать что-то вроде этого:

SELECT TOP 10
    total_worker_time/execution_count AS Avg_CPU_Time
        ,execution_count
        ,total_elapsed_time/execution_count as AVG_Run_Time
        ,(SELECT
              SUBSTRING(text,statement_start_offset/2,(CASE
                                                           WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2 
                                                           ELSE statement_end_offset 
                                                       END -statement_start_offset)/2
                       ) FROM sys.dm_exec_sql_text(sql_handle)
         ) AS query_text 
FROM sys.dm_exec_query_stats 
ORDER BY 3 DESC

см .: http://msdn.microsoft.com/en-us/library/ms189741%28SQL.90%29.aspx

1 голос
/ 27 октября 2010

Вы можете начать с изменения свойств трассировки при запуске Profiler. Выберите вкладку «Выбор событий» и нажмите кнопку «Фильтры столбцов». В диалоговом окне «Редактировать фильтр» выберите «Продолжительность». Затем нажмите «Больше или равно» и введите значение. Значение указывается в миллисекундах, поэтому, если вы хотите видеть запросы длительностью более 5 секунд, введите 5000.

Здесь вы также можете посмотреть другие фильтры и настроить значение длительности по мере необходимости.

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