Анализ производительности. Основы.

В любом севере, работающем под управлением ОС Windows (да наверное и не только Windows), есть компоненты от которых зависит его (сервера) производительность. Такими компонентами являются:

  • процессоры;
  • память;
  • диски;
  • сеть.
Примечание: При рассмотрении примеров в блоге мы не будем учитывать наличие ошибок в коде, которые, в конечном счете, тоже могут влиять на производительность.
При отыскании причин низкой производительности (особенно современных дорогостоящих систем) всегда встают вопросы:
 
  • Действительно ли система перегружена по одной из компонент и поэтому работает не так как это ожидается?
  • Действительно ли система подошла к своему пределу производительности для текущей нагрузки, или можно что-либо “подкрутить”, исправить ситуацию и система еще будет работать долго, и не потребует огромных капиталовложений?
Обнаружить, что система перегружена по любой из вышеперечисленных компонент не сложно. Для этого можно воспользоваться Task Manager-ом или Performance Monitor-ом и сравнить текущие значения с пороговыми (а они широко опубликованы в Интернете) и вы получите желаемый результат.
Однако ответ на второй вопрос требует наличия специальных знаний, которых нет в концентрированном виде ни в одном из известных мне источников. Вот для того, чтобы заполнить этот пробел и по  просьбам многих наших клиентов, было решено организовать серию статей по данной тематике.
И так. Общий алгоритм анализа производительности и ответа на оба вопроса приведен ниже.
  1. Измерить базовые счетчики для каждой компоненты (подсистемы) сервера и сравнить их показания с пороговыми значениями,
    если показатели подошли (или превысили пороговые), то приступить к анализу SQL Server (или любого другого сервера) с целью определения подсистем “съевших” вычислительные мощности системы.
  2. ... если показатели не превышают пороговые, то быстрее всего проблема медленной работы SQL Server (или прикладного сервера) лежит в области неоптимальности самого сервера и в этом случае вам, быстрее всего, потребуется подробный анализ SQL Server с помощью SQL Profiler Trace, DMV, DBCC и пр.Ясно, что в приведенном подходе есть некая доля упрощения, поскольку нельзя полностью вписать реальный мир ни в какие правила или алгоритмы, однако (в большинстве ситуаций) такой алгоритм приведет вас к ответу на вопросы, обозначенные в начале статьи.
Далее мы последовательно начнем рассмотрение основ анализа производительности сервера, компонента за компонентой.
Первые четыре статью будут описывать основы анализа (отыскание корневой проблемы (Root Cost Analysis)). Цель такого анализа – выйти на основной (корневой) источник проблемы.
 
Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)