Что может заставить БД SQL Server проявлять циклическое поведение ЦП? - PullRequest
0 голосов
/ 11 октября 2011

У меня есть система, которая обрабатывает сообщения из очереди MSMQ (используя несколько процессов для обработки).

Каждая обработка сообщения предполагает чтение нескольких строк, а также 3 обновления и 1 вставку. Эта система обрабатывает около 60 сообщений в секунду.

Что меня удивляет, так это то, что когда по какой-то причине в очереди накапливаются сообщения, а система работает с максимальной скоростью для обработки сообщений, загрузка ЦП имеет цикл с пиками 95% -100%. и долины 50% -45%. Такое поведение сохраняется, даже когда я добавляю больше процессов для обработки.

Ожидается ли, что SQL Server продемонстрирует такое поведение, когда рабочая нагрузка подразумевает вставку строк и обновления (я думаю, очистка кэша и т. Д.)? Может быть, это как-то связано с хостом (он работает на Hyper-V, а не на реальном оборудовании)?

Вот ссылка на Perfmon Run: http://dl.dropbox.com/u/2200654/sql_perf_000001.rar

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Это пример того, как запустить трассировку счетчика logman для некоторых соответствующих счетчиков с интервалом сбора 10 с для экземпляра SQL Server по умолчанию:

@echo off
del %temp%\sql_perf*.blg
logman delete sql_perf
logman create counter sql_perf -f bin -si 10 -o %temp%\sql_perf.blg -c "\Processor(_Total)\*" "\Physical Disk(*)\*" "\Process(*)\*" "\SQLServer:Access Methods\*" "\SQLServer:Databases(*)\*" "\SQLServer:Memory Manager\*" "\SQLServer:SQL Statistics\*" "\SQLServer:Wait Statistics\*" "\SQLServer:Transactions\*"
logman start sql_perf

Именованные экземпляры изменяют имя категории счетчика с «SQLServer: ...» на «: ...»

В загруженных счетчиках производительности отсутствуют счетчики Phsyical Disk, поэтому анализ ввода-вывода является неполным, но одно замечание заключается в том, что загрузка ЦП% точно соответствует транзакции SQL Server / с и пакетам / с:

EBUS performance counters

Обратите внимание, как красная линия (% CPU) точно соответствует форме зеленой линии (транзакций / сек), а также синей линии (пакетов / сек). Это указывает на то, что пики полностью зависят от поведения приложения. Проще говоря, SQL Server резко увеличивает нагрузку на процессор (а также на чтение и запись ввода-вывода, фиолетовая линия) просто потому, что ваше приложение вызывает скачки запросов каждые 3 минуты или около того.

0 голосов
/ 25 ноября 2011

Я нашел причину странного поведения: нехватка памяти.Когда я добавил счетчик «Memory: Page Reads / sec», значения долин совпали со временем высокой ошибки страниц.

Спасибо за ваши ответы (теперь вопрос кажется глупым, я буду просить больше памяти :).

0 голосов
/ 11 октября 2011

Проверьте остальное - может быть, вы нажали точку проверки, и, таким образом, обработка замедляется, пока грязные страницы не будут записаны в базу данных?

...