Выявление проблем производительности SQL Server - PullRequest
9 голосов
/ 18 августа 2008

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

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

Ответы [ 7 ]

12 голосов
/ 18 августа 2008

Это даст вам 50 лучших операторов по среднему времени CPU, проверьте здесь другие скрипты: 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
4 голосов
/ 18 августа 2008

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

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

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

3 голосов
/ 18 августа 2008

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

3 голосов
/ 18 августа 2008

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

2 голосов
/ 18 августа 2008

Эта утилита от Erland Sommarskog очень полезна.

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

2 голосов
/ 18 августа 2008

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

2 голосов
/ 18 августа 2008

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

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