Есть ли способ найти самые дорогие запросы в течение определенного времени? - PullRequest
0 голосов
/ 01 декабря 2010

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

Итак, кто-нибудь знает инструмент или способ, которым я могу отслеживать запросы к приложению, а затем узнавать самые дорогие запросы этого сеанса?

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

В строке подключения ваших приложений к SQL Server добавьте (OTTOMH) APPLICATION_NAME = 'ABC App'. Таким образом, в действительности это должно быть похоже на

'Сервер = ИМЯ ВАШЕГО ПЕРСОНАЛА; Интегрированная безопасность = SSPI; Имя_приложения = приложение ABC'

Когда ваше приложение запущено, вы можете запустить sp_who2 в SQL Server Management Studio, чтобы просмотреть все соединения - проверьте, чтобы убедиться, что ваше приложение отображается с именем, а не с общим именем для приложений .Net.

* Дважды проверьте, если это имя приложения или имя_приложения *

При настройке флагов трассировки в Profiler перейдите на вкладку «События» и нажмите «Фильтры столбцов». Первый для ApplicationName. Установите для этого параметра «% ABC App%»

1 голос
/ 01 декабря 2010

Используйте трассировку SQL на стороне сервера (а не графический интерфейс Profiler, поскольку это добавляет дополнительные издержки), Фильтруйте по спиду (ам), используемым вашим приложением, используйте утилиты RML для обработки и агрегирования данных трассировки

Утилиты RML позаботятся о том, чтобы шаблонизировать похожие запросы с разными значениями текстовых столбцов (например, вызывать одни и те же хранимые процедуры с разными значениями параметров), чтобы они агрегировались вместе.

0 голосов
/ 14 апреля 2015
  SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
  ((CASE qs.statement_end_offset
  WHEN -1 THEN DATALENGTH(qt.TEXT)
  ELSE qs.statement_end_offset
  END - qs.statement_start_offset)/2)+1),
  qs.execution_count,
  qs.total_logical_reads, qs.last_logical_reads,
  qs.total_logical_writes, qs.last_logical_writes,
  qs.total_worker_time,
  qs.last_worker_time,
  qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
  qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
  qs.last_execution_time,
  qp.query_plan
  FROM sys.dm_exec_query_stats qs
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
  CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
  ORDER BY qs.total_logical_reads DESC
...