Выявление проблем производительности SQL Server

У нас возникают спорадические, случайные тайм-ауты запросов в нашем кластере SQL Server 2005. У меня есть несколько приложений, которые его используют, поэтому я помогаю в расследовании. Наблюдая за% процессорного времени в обычном старом Perfmon, вы определенно можете увидеть, как оно сокращается. Однако монитор активности SQL дает только совокупное время ЦП и ввода-вывода, используемое процессом, а не то, что он использует в данный момент или за определенный период времени. Возможно, я мог бы использовать профилировщик и запустить трассировку, но этот кластер очень интенсивно используется, и я боюсь, что буду искать иголку в стоге сена. Я лаю не на то дерево?

Есть ли у кого-нибудь хорошие методы для отслеживания дорогостоящих запросов / процессов в этой среде?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
3 808
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Profiler может показаться подходом «иголка в стоге сена», но он может оказаться полезным. Попробуйте запустить его на пару минут, пока базы данных находятся под обычной нагрузкой, и посмотрите, не выделяются ли какие-либо запросы как занимающие слишком много времени или каким-то образом ресурсы. Хотя подобная ситуация может указывать на некоторую общую проблему, она также может быть связана с какой-то конкретной проблемой с одним или двумя сайтами, которые при определенных обстоятельствах приводят к серьезным сбоям в работе, что приводит к очень низкой производительности по всем направлениям.

Мы используем продукт Quest Прожектор. Очевидно, что это вложение времени и денег, поэтому это может не помочь вам в краткосрочной перспективе, но если у вас большая среда SQL, это очень полезно.

Ответ принят как подходящий

Это даст вам 50 лучших операторов по среднему времени ЦП, проверьте здесь другие скрипты: http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50
        qs.total_worker_time/qs.execution_count as [Avg CPU Time],
        SUBSTRING(qt.text,qs.statement_start_offset/2, 
            (case when qs.statement_end_offset = -1 
            then len(convert(nvarchar(max), qt.text)) * 2 
            else qs.statement_end_offset end -qs.statement_start_offset)/2) 
        as query_text,
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid 
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY 
        [Avg CPU Time] DESC

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

Запустите Profiler и отфильтруйте запросы, для которых требуется больше определенного количества чтений. Для приложения, над которым я работал, любой запрос, не связанный с отчетом, потребовавший более 5000 чтений, заслуживает второго рассмотрения. У вашего приложения может быть другой порог, но идея та же.

Эта утилита от Эрланда Соммарскога очень полезен.

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

Я нашел Отчеты панели мониторинга производительности очень полезным. Они представляют собой набор настраиваемых отчетов RS, предоставляемых Microsoft. Вам просто нужно запустить установщик на своем клиентском ПК, а затем запустить setup.sql на экземпляре SQL Server.

После этого щелкните правой кнопкой мыши базу данных (неважно какую) в SSMS и перейдите в Отчеты -> Пользовательские отчеты. Найдите и выберите файл performance_dashboard_main.rdl, который по умолчанию находится в папке \ Program Files \ Microsoft SQL Server \ 90 \ Tools \ PerformanceDashboard. Вам нужно сделать это только один раз. После первого раза он появится в списке отчетов.

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

Другие вопросы по теме