Назад | Перейти на главную страницу

Постоянная загрузка процессора SQL Server 2012

Я пытаюсь диагностировать ненормальное использование ЦП процессом sqlservr.exe из установки SQL Server 2012 Express.

Установка выполняется на виртуальной машине с Windows Server 2012 R2, 8-ядерным процессором Xeon E5 и 8 ГБ оперативной памяти.

Загрузка ЦП (как из ProcessExplorer, так и из диспетчера задач) постоянно находится на уровне 12-15%. Перезапуск службы не имеет никакого эффекта, загрузка ЦП вернется на тот же уровень через несколько минут после перезапуска.

Моя самая большая проблема заключается в том, что сервер SQL был связан со сторонним программным обеспечением, и у меня нет доступа к БД. Мне был предоставлен доступ только для чтения к базе данных программного обеспечения (я могу получить доступ только к представлениям, а не к таблицам), но я не могу запускать какие-либо отчеты из SSMS или выполнять этот.

Высокое потребление ЦП определенно происходит из-за стороннего приложения (если я его остановлю, нагрузка вернется к уровню простоя), но их поддержка до сих пор была бесполезной в решении этой проблемы, и мне нужно разобраться с этим самостоятельно.

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

Вам потребуется по крайней мере либо view server state или view database state прежде чем вы сможете подумать об анализе каких-либо проблем с производительностью внутри SQL Server:

Что может делать пользователь с разрешениями VIEW SERVER STATE?

Поскольку вы ограничены встроенным монитором производительности Windows, вы можете отслеживать следующие счетчики для выявления основных проблем:

  • Память - доступные МБ
  • Физический диск - средн. Диск сек / чтение
  • Физический диск - средн. Диск сек / запись
  • Физический диск - чтения с диска / сек
  • Физический диск - операций записи на диск / сек
  • Процессор -% загруженности процессора
  • SQLServer: Общая статистика - Подключения пользователей
  • SQLServer: диспетчер памяти - ожидающие предоставления памяти
  • SQLServer: статистика SQL - пакетных запросов / сек
  • SQLServer: статистика SQL - компиляций / сек
  • SQLServer: статистика SQL - повторных компиляций / сек
  • Система - длина очереди процессора

Эти счетчики перечислены в соответствии со следующей статьей Рекомендации по использованию SQL Server Perfmon (Performance Monitor).

Учитывая, что у вас загружается процессор, следующая цитата из статьи Брента кажется адекватной:

Ищите очевидные узкие места ЦП

Во-первых, посмотрите на длину очереди процессора для определения нагрузки на процессор. Если это число в среднем равно 1 или выше (кроме периода полного резервного копирования SQL Server, если вы используете сжатие резервных копий), это означает, что данные ожидают, пока процессоры станут доступны.

Я подозреваю, что это число больше 1, потому что это часто означает, что люди установили другое программное обеспечение на SQL Server, например приложения или веб-сайты. Это проблема. Если вы получите возражение со стороны руководства о том, что оно не хочет покупать новые серверы, укажите, что два ЦП с лицензией SQL Server Enterprise стоят около 50–60 тыс. Долларов, что позволяет заплатить за отдельный сервер для веб-приложения. Если вы можете исключить приложения из SQL Server, тогда вам не придется использовать столько мощности процессора, а меньшее количество процессоров означает меньшие затраты на лицензирование.

Есть более подробные метрики Perfmon, которые вы можете добавить к своему захвату, если увидите, что отображается длина очереди процессора, но для младших администраторов баз данных первое, что я бы порекомендовал, - это просто удаленный рабочий стол на SQL Server. Щелкните правой кнопкой мыши панель задач, выберите Диспетчер задач и перейдите на вкладку «Процессы». Установите флажок, в котором отображаются процессы для всех пользователей, а затем щелкните столбец ЦП, чтобы отсортировать процент ЦП от высокого к низкому. Сядьте и посмотрите минуту или две. Какие процессы используют мощность процессора? Если это SQLServer, то нам нужно провести дополнительные исследования, но есть большая вероятность, что это другое приложение, и нам нужно убрать это приложение с этого сервера. Вообще говоря, включение гиперпоточности на SQL Server не решит такой проблемы.

Если процесс sqlserver.exe является единственным с нагрузкой 12-15%, вам потребуются дополнительные разрешения, чтобы иметь возможность проанализировать основную причину.