SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |

Счётчики производительности SQL Server и Windows

ПУБЛИКАЦИИ  

Автор: Александр Гладченко

Настоящая статья исследует возможности анализа счётчиков производительности Windows 2000, под управлением которой работает SQL Server 2000. Даются пороговые значения ключевых счётчиков, рекомендации по наборам счётчиков для поиска узких мест различных компонент системы в целом и приводятся методики поиска и устранения выявленных с помощью счётчиков проблем.
При написании статьи использовались материалы технической библиотеки на сайте Microsoft, а также поставляемые с указанным выше программным обеспечением справочные, электронные документы и документация, поставляемая с Microsoft® Windows® 2000 Server Resource Kit Server Operations Guide.

1. Введение

Узкие места в системе могут проявиться, например, при исполнении тяжёлого SQL запроса. Такие места присутствуют, в той или иной степени, в каждой системе. Исследуя узкие места Microsoft SQL Server с помощью рекомендуемых в этой статье счётчиков производительности, можно разработать комплекс мер по устранению этих узких мест. Узкие места могут быть обнаружены как в производительности компонент операционной среды, так и в компонентах СУБД.

Вот наиболее типичные причины возникновения узких мест:

  • Недостаточность ресурсов, требуется их дополнить или модернизировать.

  • Совместно используемые ресурсы одного типа, нагрузка на которые распределена не равномерно (например, один диск монополизирован).

  • Ресурсы, работающие со сбоями.

  • Неправильно настроенные ресурсы.

Windows 2000 предоставляет возможность исследовать информацию о производительности, которая собирается в терминах объектов, счетчиков и экземпляров. Объектом производительности выступает любой ресурс, приложение или служба, производительность которых может быть измерена. Используя информацию, отражаемую в System Monitor (Performance Monitor в Windows NT 4.0), журналах производительности и в журнале оповещений, Вы можете выбирать объекты производительности, счетчики и экземпляры, чтобы исследовать по их значениям производительность системных компонент или имеющегося программного обеспечения.

[В начало]

2. Анализ узких мест

При анализе показателей счётчиков следует учитывать то, что слишком маленькие значения могут быть столь же существенны для производительности, как и очень большие значения. Если значение меньше ожидаемого, это может указывать на проблему в другом ресурсе. Например:

  • Другой компонент может мешать нормальной загруженности исследуемого компонента.

  • Чрезмерный сетевой трафик может мешать передаче клиентских запросов на сервер.

  • Наличие узкого места может не давать компьютеру клиента получать доступ к серверу.

  • Может неправильно использоваться System Monitor. Например, если Вы ошибочно включили счетчики для другой дисковой подсистемы или Вы ошиблись в выборе экземпляра, указали неправильные счетчики или не для того компьютера, анализируемые данные могут казаться необъяснимо низкими.

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

Кандидат на узкое местоЭффекты на сервера
Память Недостаточный объём распределенной памяти или её недоступность для SQL Server ухудшает общую производительность. Данные должны непрерывно читаться с диска, и чаще, чем данные находящиеся в кэше постоянно. Windows NT 4.0 и Windows 2000 интенсивно осуществляет обмен с файлом подкачки тогда, когда в нём находятся необходимые страницы или память нужно освободить для редко используемых страниц.
Процессоры Высокая и продолжительная утилизация процессоров может указывать на необходимость увеличения их числа.
Дисковые операции ввода - вывода (I/O) Медленные диски могут стать причиной снижения производительности I/O (дисковые операции чтения и записи), что ухудшает работу транзакционного механизма.
Подключения пользователей Не правильная конфигурация числа подключений пользователей может привести к медленной работе системы или ограничению объёма памяти, доступного SQL Server.
Блокировки Процесс (в терминах SQL Server) может вынуждать другие процессы ожидать доступа к ресурсу, замедляя или останавливая, таким образом, работу этих процессов.

Кроме того, к снижению производительности может приводить наличие комбинации узких мест (может быть даже не очень выраженных). Такие проблемы наиболее трудно поддаются локализации, т.к. анализ отдельных компонент не даёт очевидных результатов, по которым можно принять решение о наличии узкого места.

[В начало]

3. Счётчики

Каждый системный объект имеет счетчики, которые используются для измерения различных аспектов производительности, например: скорость передачи данных для дисков или утилизация процессорного времени для процессоров. Объект может иметь свои экземпляры, которые являются уникальными копиями его типа, но не все типы объектов могут иметь несколько экземпляров.
Для описания объектов, счетчиков и экземпляров используется следующий синтаксис:


\\Computer_name\Object(ParentInstance/ObjectInstance#InstanceIndex)\Counter

где:

  • \\Computer_name - дополнительный элемент, определяющий имя компьютера. Значением по умолчанию является локальный компьютер.
  • \Object - элемент, чью производительность показывает счетчик. Если этот объект имеет переменное количество экземпляров, он дополняется определяющей экземпляр строкой.
    • (ParentInstance/ObjectInstance#InstanceIndex) - элемент, который используется только тогда, когда объект поддерживает наличие множества экземпляров. Формат строки зависит от типа этого объекта. Если объект имеет один экземпляр, достаточно минимального формата, в котором указывается только имя экземпляра, заключённое в круглые скобки. Например: (Explorer).
    • Для объектов, которые существуют в нескольких экземплярах, к имени родителя прибавляется после наклонной черты (/) его номер. Например (Explorer/0).
    • Если объект может иметь множество экземпляров, которые имеют такую же строку имени, они могут быть последовательно проиндексированы, и индекс экземпляра (число, начинающееся с "1") записывается после значка решётки "#". Индексированные экземпляры отсчитываются от нулевого, так как все экземпляры имеют неявный нулевой индекс. Например: (Explorer/0#1).
  • \Counter - элемент, определяющий сам счетчик производительности.

Экземпляр, называемый "_Total instance" существует у большинства объектов и представляет собой сумму з начений для всех экземпляров объекта по используемому счётчику.

[В начало]

4. Типы счётчиков

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

  • Counter type name - тип счётчика. Счётчики System Monitor описаны в его справочном файле, там же описаны и их типы. Вы можете щёлкнуть мышкой на описание счётчика, и получите его определение.
  • Description - краткое описание типа счётчика, включающее описание формулы по которой вычисляются счётчики этого типа.
  • Generic type - родительский тип. Это общая категория, которая представляет формат отображения счётчика. Родительский тип включает:
    • Average - среднее значение. Эти счетчики измеряют значение через какое-то время и отображают среднюю величину последних двух измерений.
    • Difference - различие. Эти счетчики вычитают последнее измерение из предыдущего и отображают различие, если оно положительное; если отрицательное, они отображают ноль.
    • Instantaneous - текущее значение. Эти счетчики отображают значение текущего измерения.
    • Percentage - отображается вычисленное значение в процентах.
    • Rate - нормальное значение. Подобно среднему значению, только по всему интервалу измерений.
  • Formula - формула. Описывает, каким образом преобразуются исходные данные и другие компоненты, а также получается результирующий формат вычисленного значения для отображения на консоли. Переменные N и D используются в формуле для описания двух различных компонентов данных, например: исходного значения и частотности. Обычно, они используются для вычислений, необходимых для наглядного отображения полученных значений.

    Для каждого типа счётчиков, в формуле могут встречаться следующие переменные:

    ПеременнаяОписание
    B Переменная, хранящая исходные, основные значения. Некоторые тип счётчиков требуют использования массивов предшествующих значений, которые соотносятся с сохранённым значением для форматирования результатов. Это основное значение для любого тип счётчиков, знаменатель в формуле. При описании типа счётчика с множеством хранимых значений, каждое отдельное значение может быть позиционировано числовым индексом, например: B0 для самого старого значения выборки, B1 для следующего (более современного) значения выборки и Bn для самого последнего значения выборки.
    N Нумератор, обычно является первой переменной. В формулах N используется, чтобы описать исходные значения данных.
    D Знаменатель, обычно вторая переменная, когда она необходима.

Мы не будем описывать все существующие типы счётчиков, а ограничимся только теми, которые нам встретятся по тексту настоящей статьи. Вот они:

Базовый тип Описание Корреспондируемые типы
PERF_AVERAGE_BASE Хранит знаменатель для вычисления счётчика на текущий момент "time per operation" или "count per operation" PERF_AVERAGE_BULK
PERF_AVERAGE_TIMER
PERF_COUNTER_MULTI_BASE Показывает число выбранных элементов. Используется как знаменатель в вычислениях среднего значения выбранных элементов при синхронизации множителя, но сохраняет смысл элементов. PERF_100NSEC_MULTI_TIMER
PERF_100NSEC_MULTI_TIMER_INV
PERF_COUNTER_MULTI_TIMER
PERF_COUNTER_MULTI_TIMER_INV
PERF_RAW_BASE Хранит знаменатель счетчика, который представляет собой общую арифметическую дробь. PERF_RAW_FRACTION
PERF_SAMPLE_BASE Хранит число выбираемых прерываний, принимаемых и используемых как знаменатель в выбираемой дроби. Выбираемая дробь - число выборок, которые были 1 (или ИСТИНА) при типовом прерывании. PERF_SAMPLE_FRACTION

Тип: PERF_100NSEC_TIMER
Код типа: не представлен в таблице sysperfinfo

Описание Этот тип счётчиков показывает время активности компонента как процент от всего прошедшего времени базового интервала. Он измеряет время интервалами по 100ns. Счетчики этого типа предназначены для измерения утилизации одного компонента в данный момент времени
Родительский тип Значение в процентах.
Формула (N1 - N0) / (D1 - D0) x 100, где знаменатель (D) представляет прошедшее, полное время базового интервала, а нумератор (N) представляет части базового интервала, в течение которого исследуемые компоненты были активны
Среднее значение ( Nx - N0) / (Dx - D0) x 100

Тип: PERF_RAW_FRACTION
Код типа: 537003008

Описание Этот тип счётчиков показывает отношение подмножества к его полному множеству в процентах. Например, для сравнения числа байт, используемых на диске к его общему размеру в байтах. Счетчики этого типа показывают текущее процентное отношение, а не среднее значение за какое-то время.
Родительский тип Текущее значение, значение в процентах.
Формула (N0 / D0), где D - измеряемый атрибут, а N - один из компонентов этого атрибута.
Среднее значение SUM (N / D) /x

Тип: PERF_COUNTER_COUNTER
Код типа: 272696320

Описание Этот тип счётчиков показывает среднее число операций, законченных в течение одной секунды - базового интервала. Счетчики этого типа измеряют время импульсами сигналов системного таймера. F - переменная, которая представляет число импульсов сигнала таймера в секунду. Значение F разлагается в уравнении так, чтобы результат мог быть отображен в секундах.
Родительский тип Различие.
Формула (N1- N0) / ( (D1-D0) / F), где нумератор (N) представляет число операций, выполненных в течение последнего базового интервала; знаменатель (D) представляет число импульсов таймера за последний базовый интервала; F - частота импульсов таймера.
Среднее значение (Nx - N0) / ((Dx - D0) / F)

Тип: PERF_COUNTER_RAWCOUNT
Код типа: 65536

Описание Этот тип счётчиков показывает только последнее, полученное значение. Они не показывают среднее значение.
Родительский тип Текущее значение.
Формула Не используется. Показываются исходные данные так, как они были собраны.
Среднее значение SUM (N) / x

Тип: PERF_SAMPLE_FRACTION
Код типа: 549585920

Описание Этот тип счётчика показывает среднее отношение попаданий ко всем операциям в течение последних двух базовых интервалов.
Родительский тип Процент; процент попаданий.
Формула (N1 - N0) / (D1 - D0), где нумератор (N) представляет число успешных операций в течение последнего базового интервала, а знаменатель (D) представляет изменение в числе всех операций (измеряемого типа) законченный в течение этого интервала.Счетчики Hit% лучшие наблюдать через System Monitor в виде диаграмм. Попадания часто появляются в виде коротких пиков, которые можно не заметить в текстовом представлении. Также, среднее число, отображенное для Hit% в строке состояния в виде диаграммы не соответствует среднему числу, отображенному в текстовом представлении, потому что они рассчитываются по-другому. В виде диаграммы, Hit% является средним числом всех изменений в счетчике в течение исследуемого интервала; в текстовом представлении, это будет среднее число различий между первым и последним измерением в течение базового интервала.
Среднее значение (Nx - N0) / (Dx - D0)

[В начало]

5. Память

Анализ проблем с производительностью сервера стоит начинать с мониторинга счётчиков памяти. Особое внимание стоит уделить свопингу, т.е. подкачке страниц памяти. Большой свопинг может существенно утилизировать ресурсы компьютера и очень сильно повлиять на время отклика системы.
Во время свопинга, оперативная память освобождается для использования активными процессами. Располагаемые в памяти данные других приложений (блоки фиксированной длинны) сбрасываются на диск в файл подкачки (страничный файл), в виде страниц. При этом, если сброшенные на диск в файл подкачки страницы вскоре потребуются, сервер опять будет загружать их в память, высвобождая её от данных других приложений. Сам по себе свопинг не является вредным явлением, плохо, когда он слишком большой.

[В начало]

5.1. Поиск узких мест использования памяти Windows 2000

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

Объект \ счетчик Рекомендуемое пороговое значение Комментарий Тип
Memory\Available Bytes
(Доступно байт)
Менее 4 Мбайт Объем реальной памяти в байтах, в текущий момент находящейся в списках обнуленной (Zeroed), свободной (Free) или простаивающей (Standby) памяти. Обнуленная и свободная память готова для использования, причем обнуленная память очищена нулями. Простаивающая (Standby) память - это память, изъятая из рабочего множества памяти и предназначенная для перемещения на диск, но она может быть вновь запрошена и использована без необходимости чтения данных с диска. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени.При превышении порога (значение меньше 4 Мб), необходимо увеличить объём ОЗУ PERF_COUNTER_RAWCOUNT
Memory\ Pages/sec
(Обмен страниц/сек)
20 Нормальное значение числа страниц, прочитанных с диска или записанных на диск для того, чтобы разрешить обращения к страницам памяти, которые не были загружены в оперативную память в момент обращения. Эта величина является суммой величин Ввод страниц/сек и Вывод страниц/сек, и включает страничный обмен (подкачку) системной кэш-памяти для доступа к файлам данных для приложений. Кроме того, сюда включается страничный обмен (подкачка) для не кэшированных файлов, непосредственно отображаемых в память. Это основной счетчик, за которым следует следить в том случае, если наблюдается большая нагрузка на использование памяти и связанный с этим избыточный страничный обмен.Превышение порога обмена страниц может быть вызвано большим свопингом. Что бы это проверить, проконтролируйте счётчики Memory\Page Faults/sec и Paging File\ % Usage Peak PERF_COUNTER_COUNTER
Paging File\% Usage Peak
(Файл подкачки\% использования (пик))
99% Максимальное использование файла подкачки (страничного файла) в процентах. См. также 'Процесс: Байт файла подкачки (пик)'. Для определения активности обмена страниц рассматривайте это значение вместе со значениями счетчиков Available Bytes и Pages/secПо показаниям этого счётчика можно сделать вывод, вызвана ли большая дисковая активность листанием. PERF_RAW_FRACTION

При мониторинге производительности экземпляра Microsoft SQL Server необходимо выяснить, используется ли им память в допустимых пределах и не испытывает ли SQL Server и другие процессы недостаток памяти или же он потребляет её слишком много. Определить, является ли SQL Server, а не другие процессы, виновником чрезмерного листания, можно контролируя счётчик Process\Page Faults/sec, который запущен для процесса Вашего экземпляра SQL Server.

[В начало]

5.2. Наборы счётчиков мониторинга памяти

Для контроля производительность физической и виртуальной памяти Windows 2000, используйте следующий набор счётчиков:

Объект \ счетчик Комментарий Тип
Memory\Available Bytes
Доступно байт)
Memory\Available KBytes
(Доступно КБ)
Memory\Available Mbytes
(Доступно МБ)
это объем реальной памяти в байтах, килобайтах (1024 байт), мегабайтах (1048576 байт), в текущий момент находящейся в списках обнуленной (Zeroed), свободной (Free) или простаивающей (Standby) памяти. Обнуленная и свободная память готова для использования, причем обнуленная память очищена нулями. Простаивающая (Standby) память - это память, изъятая из рабочего множества памяти и предназначенная для перемещения на диск, но она может быть вновь запрошена и использована без необходимости чтения данных с диска. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени. PERF_COUNTER_RAWCOUNT
Memory\Page Faults/sec
(Ошибок страницы/сек)
это среднее значение счетчика ошибок страницы (Page Faults) в секунду для данного процессора. Ошибка станицы возникает, когда процесс ссылается на страницу виртуальной памяти, которая не находится в рабочем множестве (Working Set) оперативной памяти. Ошибка станицы не вызывает загрузку соответствующей страницы с диска, если эта страница находится в списке простаивающих (Standby list), и тем самым уже находится в оперативной памяти, или если эта страница используется другим процессом, имеющим совместный доступ к этой странице. Измерение осуществляется, как количество ошибочных страниц; потому что учитывается только одна ошибка на странице в каждой ошибочной операции, результат может приравниваться к числу ошибок операций со страницами. Этот счетчик включает как жёсткие ошибки (те, которые требуют дискового доступа), так и мягких ошибок (когда ошибочные страницы могут быть найдены в другом месте физической памяти). Большинство процессоров умеет корректно работать с большим числом мягких ошибок, не вызывая заметных последствий. Однако, жесткие ошибки, которые требуют дискового доступа, могут стать причиной задержек. PERF_COUNTER_COUNTER
Memory\Page Reads/sec
(Чтение страниц/сек)
это нормальное значение операций чтения диска при получении страниц виртуальной памяти для разрешения жёстких ошибок страниц. При выполнении одной операции чтения могут быть получены одновременно несколько страниц. Счётчик показывает число операций чтения, без отношения к числу страниц, найденных в каждой операции. Жесткие ошибки страниц происходят, когда процесс имеет ссылку на страницу в виртуальной памяти, которая находится вне его рабочего набора или в другом месте физической памяти, и страница должны быть найдена на диске. Этот счетчик является основным индикатором тех ошибок, которые являются причиной задержек системы. Он затрагивает операции чтения, при разрешении ошибок в кэше файловой системы (обычно используемом прикладными программами) и в не кэшируемых, размещённых в памяти файлах. Чтобы определить среднее число чтений страниц в течение каждой операции чтения, сравните значение Page Reads/sec со значением Pages Input/sec. PERF_COUNTER_COUNTER
Memory\Page Writes/sec
(Вывод страниц/сек)
это нормальное значение количества страниц, записываемых на диск потому, что эти страницы были изменены в оперативной памяти. Эти страницы обычно содержат данные, а не код. Этот счётчик показывает операции записи, безотносительно к числу страниц, записанных в каждой операции. PERF_COUNTER_COUNTER
Memory\Pages Input/sec
(Операций ввода страниц/сек)
показывает норму чтений страниц с диска в секунду, для разрешения жёстких ошибок страниц. Жёсткие ошибки страниц возникают в процессе обращения к странице в виртуальной памяти, которая существует вне рабочего набора или размещена в другом месте физической памяти, и должна быть считана с диска. При обнаружении ошибочных страниц, система попытается считать множество непрерывных страницы в память, чтобы повысить отдачу от операций чтения. Сравните Pages Input/sec и Page Reads/sec, чтобы найти среднее число чтений страниц в память в течение каждой операции чтения. PERF_COUNTER_COUNTER
Memory\Pages Output/sec
(Операций вывода страниц/сек)
это счетчик представляет нормальное значение количества операций записи страниц на диск, вызванных тем, что эти страницы были изменены в оперативной памяти после того, как были прочитаны. Каждая такая операция вывода может записывать на диск несколько страниц. Высокое нормальное значение вывода страниц может указывать на нехватку памяти. Windows 2000 записывает большее количество страниц обратно на диск для освобождения места, когда физической памяти установлено на сервере недостаточно много. Этот счетчик показывает число страниц и может быть сравнён с другим счетом страниц без какого-либо преобразования PERF_COUNTER_COUNTER
Memory\Pool Nonpaged Bytes
(Байт в невыгружаемом страничном пуле)
это объем в байтах специальной системной области памяти, где компоненты операционной системы запрашивают место, необходимое им для функционирования. Страницы невыгружаемого страничного пула не могут быть выгружены в файл подкачки (страничный файл) на диск и остаются в оперативной памяти в течение всего периода их использования. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени. Memory\Pool Nonpaged Bytes рассчитывается иначе, чем Process\ Pool Nonpaged Bytes, поэтому значение этого счётчика не эквивалентно Process(_Total )\ Pool Nonpaged Bytes PERF_COUNTER_RAWCOUNT
Process\Page Faults/sec
(Ошибок страницы/сек)
Ошибок страницы/сек - это значение счетчика ошибок страницы (Page Faults), вызванных потоками, выполняющимися в данном процессе. Ошибка станицы возникает, когда поток ссылается на страницу виртуальной памяти, которая не находится в рабочем множестве (Working Set) оперативной памяти. Ошибка станицы не вызывает загрузку соответствующей страницы с диска, если эта страница находится в списке простаивающих (Standby list), и тем самым уже находится в оперативной памяти, или если эта страница используется другим процессом, имеющим совместный доступ к этой странице. PERF_COUNTER_COUNTER
Process\Page File Bytes
(Байт файла подкачки)
Байт файла подкачки - это объем в байтах файла подкачки (страничного файла), который использует данный процесс в настоящий момент. Файлы подкачки хранят страницы памяти, используемые данным процессом, но не хранящиеся в каких либо других файлах. Файлы подкачки совместно используются всеми процессами, и захват памяти в файлах подкачки может привести к неспособности других процессов выделить нужную память. PERF_COUNTER_RAWCOUNT
Process\Private Bytes
(Байт исключительного пользования)
Байт исключительного пользования (Private Bytes) - это объем в байтах выделенной данному процессу памяти, которая не может использоваться совместно с другими процессами. PERF_COUNTER_RAWCOUNT
Process\Working Set
(Рабочее множество)
Текущий объем в байтах рабочего множества страниц для данного процесса. Рабочее множество - это множество страниц памяти, затронутых в последнее время потоками, выполняющимися в данном процессе. Если объем свободной памяти компьютера превышает пороговое значение, страницы остаются в рабочем множестве даже если они не используются. Когда объем свободной памяти оказывается ниже порогового значения, страницы изымаются из рабочих множеств. Если они продолжают использоваться, то они вновь будут включены в рабочее множество при разрешении возникшей ошибки страницы до того, как окажутся фактически выгружены из оперативной памяти. PERF_COUNTER_RAWCOUNT

[В начало]

Для контроля производительность кэша Windows 2000, используйте следующий набор счетчиков:

Объект \ счетчик Комментарий Тип
Cache\Copy Read Hits %
(Попадания при чтении с копированием)
Процент операций чтения с копированием, которые 'попадают в кэш', т.е. не требуют выполнения чтения данных с диска для обеспечения доступа к данной странице в кэш-памяти. Чтение с копированием - это операция чтения файла, которая может быть разрешена с помощью копирования данных со страницы кэш-памяти в буфер приложения. Редиректор (перенаправитель) LAN использует этот метод для получения данных из кэш-памяти, а при малых объемах передачи его использует Сервер LAN. Этим же методом пользуются и дисковые файловые системы. PERF_SAMPLE_FRACTION
Cache\Copy Reads/sec
(Чтений с копированием/сек)
Частота операций чтения данных со страниц кэш-памяти, которые вызывают копирование данных из кэш-памяти в буфер приложения. PERF_COUNTER_COUNTER
Cache\Data Flushes/sec
(Сбросов данных на диск/сек)
Частота, с которой данные из кэш-памяти сбрасываются на диск в результате выполнения запросов сквозной записи в файл (write-through file write request). При каждой операции сброса данных на диск может быть передано более одной страницы данных. PERF_COUNTER_COUNTER
Cache\Lazy Write Flushes/sec
(Сбросов 'ленивой' записи/сек)
Частота активизации потока 'ленивой' (отложенной) записи из кэш-памяти (Lazy Write) при выполнении записи данных на диск. 'Ленивая' запись - это процесс обновления данных на диске после того, как страница данных была изменена в памяти, так что при этом приложение, выполняющее изменение файла, не обязано ждать завершения записи данных на диск, прежде чем продолжить работу. Таким образом, при каждой операции записи на диск может быть передано более одной страницы данных. PERF_COUNTER_COUNTER
Cache\Lazy Write Pages/sec
(Станиц 'ленивой' записи/сек)
Частота, с которой поток 'ленивой' записи из кэш-памяти (Lazy Write) выполняет запись страниц данных на диск. PERF_COUNTER_COUNTER
Cache\Read Aheads/sec
(Упреждающих чтений/сек)
Частота операций чтения, при выполнении которых обнаруживается последовательный доступ к файлу. Упреждающее чтение позволяет передавать данные более крупными блоками, чем блоки, запрашиваемые приложением, что уменьшает затраты времени на доступ к данным. PERF_COUNTER_COUNTER
Memory\Cache Bytes
(Байт кэш-памяти)
Является суммой счетчиков System Cache Resident Bytes, System Driver Resident Bytes, System Code Resident Bytes и Pool Paged Resident Bytes. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени. PERF_COUNTER_RAWCOUNT
Memory\Cache Faults/sec
(Ошибки кэш-памяти/сек)
Ошибки кэш-памяти происходят в том случае, если диспетчер кэш-памяти не находит страницу файла в непосредственной кэш-памяти и должен запросить у диспетчера памяти местонахождение страницы в другом месте оперативной памяти или на диске для того, чтобы можно было загрузить эту страницу в непосредственную кэш-память. PERF_COUNTER_COUNTER
Memory\Page Faults/sec
(Ошибок страницы/сек)
Среднее значение счетчика ошибок страницы (Page Faults) в секунду для данного процессора. Ошибка станицы возникает, когда процесс ссылается на страницу виртуальной памяти, которая не находится в рабочем множестве (Working Set) оперативной памяти. Ошибка станицы не вызывает загрузку соответствующей страницы с диска, если эта страница находится в списке простаивающих (Standby list), и тем самым уже находится в оперативной памяти, или если эта страница используется другим процессом, имеющим совместный доступ к этой странице. Измерение осуществляется, как количество ошибочных страниц; потому что учитывается только одна ошибка на странице в каждой ошибочной операции, результат может приравниваться к числу ошибок операций со страницами. Этот счетчик включает как жёсткие ошибки (те, которые требуют дискового доступа), так и мягких ошибок (когда ошибочные страницы могут быть найдены в другом месте физической памяти). Большинство процессоров умеет корректно работать с большим числом мягких ошибок, не вызывая заметных последствий. Однако, жесткие ошибки, которые требуют дискового доступа, могут стать причиной задержек. PERF_COUNTER_COUNTER
Memory\Pages Input/sec
(Операций ввода страниц/сек)
Показывает норму чтений страниц с диска в секунду, для разрешения жёстких ошибок страниц. Жёсткие ошибки страниц возникают в процессе обращения к странице в виртуальной памяти, которая существует вне рабочего набора или размещена в другом месте физической памяти, и должна быть считана с диска. При обнаружении ошибочных страниц, система попытается считать множество непрерывных страницы в память, чтобы повысить отдачу от операций чтения. Сравните Pages Input/sec и Page Reads/sec, чтобы найти среднее число чтений страниц в память в течение каждой операции чтения. PERF_COUNTER_COUNTER
Memory\Pages Output/sec
(Операций вывода страниц/сек)
Счётчик представляет нормальное значение количества операций записи страниц на диск, вызванных тем, что эти страницы были изменены в оперативной памяти после того, как были прочитаны. Каждая такая операция вывода может записывать на диск несколько страниц. Высокое нормальное значение вывода страниц может указывать на нехватку памяти. Windows 2000 записывает большее количество страниц обратно на диск для освобождения места, когда физической памяти установлено на сервере недостаточно много. Этот счетчик показывает число страниц и может быть сравнён с другим счетом страниц без какого-либо преобразования PERF_COUNTER_COUNTER
PhysicalDisk\Disk Reads/sec
(Обращений чтения с диска/сек)
Частота выполнения операций чтения с этого диска PERF_COUNTER_COUNTER
PhysicalDisk\Disk Writes/sec
(Обращений записи на диск/сек)
Частота выполнения операций записи на этот диск. PERF_COUNTER_COUNTER

[В начало]

Для контроля производительность использования памяти SQL Server, используйте следующий набор счетчиков:

Объект \ счетчик Рекомендуемое пороговое значение Комментарий Тип
Process\Working Set
(Рабочее множество)
Если значение этого счётчика ниже объема выделенной SQL Server памяти, и SQL Server ограничен в использовании памяти установленными параметрами min и max server memory, значит SQL серверу выделено больше памяти чем ему необходимо. Текущий объем в байтах рабочего множества страниц для данного процесса. Рабочее множество - это множество страниц памяти, затронутых в последнее время потоками, выполняющимися в данном процессе. Если объем свободной памяти компьютера превышает пороговое значение, страницы остаются в рабочем множестве даже если они не используются. Когда объем свободной памяти оказывается ниже порогового значения, страницы изымаются из рабочих множеств. Если они продолжают использоваться, то они вновь будут включены в рабочее множество при разрешении возникшей ошибки страницы до того, как окажутся фактически выгружены из оперативной памяти. PERF_COUNTER_RAWCOUNT
SQL Server\Buffer Manager\Buffer Cache Hit Ratio >= 90%

Вы должны стремится, чтобы это значение было предельно высоким. Увеличить значение Buffer Cache Hit Ratio можно простым увеличением объема памяти, доступной SQL Server
Процент от страниц, найденных в буферном кэше и которые не понадобилось читать с диска. Общее количество попаданий в кэш, разделенное на общее количество поисков в кэше, с момента запуска экземпляра SQL Server. Показывает, насколько полно SQL Server может разместить данные в буфере кэша. В течении длительного периода времени, значение этого счётчика изменяется очень медленно. PERF_SAMPLE_FRACTION
SQL Server\Memory Manager\Total Server Memory (KB) Если значение этого счётчика постоянно больше объёма выделенной SQL Server памяти, значит необходимо увеличить доступную SQL Server память, а если выделен максимально возможный объём, увеличить память у компьютера. Общая сумма динамической памяти (в килобайтах) которую сервер использует в настоящее время. PERF_COUNTER_COUN
SQL Server\Cache Manager Object\ Cache Hit Ratio >= 85%

Если Вы наблюдаете снижение среднего значения этого счётчика, рассмотрите возможность добавление ОЗУ или оптимизации ваших запросов.
Отношение между попаданием в кэш и поиском для хранимых процедур, специальных и подготовленных инструкций Transact-SQL и триггеров. Показывает, может ли SQL Server размещать полностью планы исполнения запросов в кэше процедур.Боле тонко регулировать кэширование можно используя флаг трассировки 1081, добиваясь, что бы страницы индексов оставались в кэше данных дольше, чем страницы данных. PERF_SAMPLE_FRACTION

По умолчанию, SQL Server захватывает необходимую ему память динамически, при наличии доступных системных ресурсов. Если SQL Server нуждается в увеличении используемого объёма памяти, он делает запрос к операционной системе, чтобы определить, является ли свободная физическая память доступной и если это так, он её использует. Если SQL Server больше не нуждается в памяти, которая была ему распределена, он отдаёт её операционной системе. Однако, опция динамического использования памяти может быть отменена через параметры конфигурации min server memory, max server memory и set working set size.
Указание параметра запуска SQL Server "-x" приводит к тому, что становится невозможным собирать статистику по счётчикам процессора и Cache Hit Ratio. Использование этого параметра позволяет повысить производительность сервера, за счёт отключения сбора указанной статистики.

[В начало]

5.3. Системная таблица sysperfinfo

Кроме System Monitor, для получения значений счётчиков производительности, можно использовать системную таблицу базы данных master - sysperfinfo. Нужно только помнить, что значения, которые хранятся в колонке cntr_value, не являются теми значениями, которые Вы можете наблюдать на графики монитора производительности. Эти значения нужно подставить в формулу для данного типа счётчика, масштабировать соответствующим образом и тогда получатся привычные цифры. Необходимые формулы были приведены при описании типов счётчиков.
Вот несколько примеров преобразований значений из этой таблицы для получения их в удобном для анализа формате:

SQL Server\Buffer Manager\Buffer Cache Hit Ratio вычисляется по следующей формуле из значений sysperfinfo:

SQL Server\Buffer Manager\Buffer Cache Hit Ratio = (Buffer Cache Hit Ratio / Buffer cache hit ratio base)*100 Значение Buffer Cache Hit Ratio относится к типу с кодом 537003008, а значение Buffer cache hit ratio base относится к типу с кодом 1073939459

Далее, по аналогии, напишем формулу для расчёта удобного для анализа формата значения счётчика SQL Server\Cache Manager Object\Cache Hit Ratio:

SQL Server\Cache Manager Object\Cache Hit Ratio = (Cache Hit Ratio с типом 537003008 / Cache Hit Ratio с типом 1073939459)*100

Как Вы видите, поскольку типы обоих счётчиков совпадают и это тип: PERF_RAW_FRACTION с кодом 537003008, вычисления выполняются по одинаковой формуле: (N0 / D0). Для масштабирования также подходит одинаковый коэффициент 100, который позволяет увидеть процентное соотношение текущего и базового показателя.

Из оставшихся двух, рекомендуемых для поиска узких мест счётчиков, значение Process\Working Set в таблице sysperfinfo отсутствует, т.к. эта таблица содержит только счётчики, относящиеся к SQL Server. Значение счётчика SQL Server\Memory Manager\Total Server Memory (KB) - может быть использовано без изменений, т.к. хранит текущий размер занимаемой памяти в килобайтах.

[В начало]

5.4. Диагностика всплесков отложенной записи

Объект \ счетчик Наблюдаемое поведение Комментарий Тип
SQL Server\Buffer Manager\Lazy Writes/sec Краткосрочные пики Число буферов, записанных в секунду процессом отложенной записи менеджера буфера. Отложенная запись - системный процесс, которые сбрасывает из блоков грязных, старых буферов (содержащие изменения, которые должны быть записаны назад на диск прежде, чем буфер сможет снова использоваться для других страниц) и делать их доступными пользовательским процессам. Отложенная запись устраняет потребность часто исполнять контрольную точку, чтобы организовать доступные буферы. PERF_COUNTER_COUNTER
Memory\Pool Nonpaged Bytes (Байт в невыгружаемом страничном пуле) Краткосрочные пики это объем в байтах специальной системной области памяти, где компоненты операционной системы запрашивают место, необходимое им для функционирования. Страницы невыгружаемого страничного пула не могут быть выгружены в файл подкачки (страничный файл) на диск и остаются в оперативной памяти в течение всего периода их использования. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени. Memory\Pool Nonpaged Bytes рассчитывается иначе, чем Process\ Pool Nonpaged Bytes, поэтому значение этого счётчика не эквивалентно Process(_Total )\ Pool Nonpaged Bytes PERF_COUNTER_RAWCOUNT
SQL Server\Buffer Manager\Page Writes/sec Краткосрочные пики Число записанных физических страниц базы данных в секунду. PERF_COUNTER_COUNTER

Вы можете наблюдать задержки физического дискового чтения и записи при запросах на I/O разделяемого между процессами дискового контроллера. Вызвано это может быть действиями клиентов, которые провоцируют повторное заполнение страницами буферного кэша, записываемые после этого на диск. Также, к подобным эффектам может привести массовое и продолжительное размещение страниц, которые должны быть записаны из буферного кэша на диск. Ещё одной причиной может быть то, что системный процесс отложенной записи совпадает или близок по времени с контрольной точкой базы данных, или если контрольная точка исполняется на базе данных, которая содержит подлежащие записи на диск страницы. В отличии от предыдущих версий, SQL Server 2000 имеет более высокую склонность к активности отложенной записи. Именно по этому, в SP3 был введён новый флаг трассировки T809, который как раз и призван решить эту проблему. Более подробно об этом флаге написано в статье FIX: SQL Server 2000 May Be More Aggressive with Lazy Writes Than SQL Server 7.0

[В начало]

6. Процессор

SQL Server не имеет своих собственных счётчиков производительности процессора и рекомендации для счётчиков Windows 2000 полностью подходят для систем с SQL Server.

[В начало]

6.1. Поиск узких мест использования процессора Windows 2000

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

Объект \ счетчик Рекомендуемое пороговое значение Комментарий Тип
Processor\% Processor Time
(% загруженности процессора)
85% Процентное отношение времени, которое процессор был занят выполнением операций для не простаивающих потоков (non-Idle thread). Эту величину можно рассматривать как долю времени, приходящегося на выполнение полезной работы. Каждый процессор может быть назначен простаивающему потоку, который потребляет непродуктивные циклы процессора, не используемые другими потоками.Позволяет находить процессы, которые наиболее сильно утилизируют процессор. Длительные превышения порога - повод для установки более быстрого процессора или для установки дополнительных процессоров. PERF_100NSEC_TIMER
Processor\ Interrupts/sec
(Прерываний/сек)
Более 2000 прерываний в секунду на процессор (зависит от типа процессора) Количество поступивших от устройств прерываний, которые обрабатывает процессор. Устройство вызывает прерывание процессора, когда оно завершает выполнение задания или когда оно требует вмешательства по каким-либо причинам. Нормальное выполнение потоков приостанавливается во время обработки прерываний. Прерывание может послужить причиной переключения процессора на обработку другого, имеющего более высокий приоритет потока. Прерывания часов (Clock interrupts) - наиболее частые и регулярные события, и являются фоном, на котором происходит обработка остальных прерываний. Значительное и продолжительное превышение этого порога без адекватной загрузки системных ресурсов, указывает на аппаратные проблемы. Найдите сетевой адаптер или плату дискового контроллера, порождающую большое количество прерываний. Вы можете установить дополнительный адаптер или плату дискового контроллера. PERF_COUNTER_COUNTER
System\Processor Queue Length
(Длина очереди процессора)
2 Текущая длина очереди процессора, измеряемая числом ожидающих потоков. Все процессоры используют одну общую очередь, в которой потоки ожидают получения циклов процессора. Этот счетчик не включает потоки, которые выполняются в настоящий момент. Длительное время существующая очередь длиной больше двух потоков обычно свидетельствует о перегруженности процессора. Этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени. PERF_COUNTER_RAWCOUNT
Server Work Queues\Queue Length
(Длина очереди)
4 Текущая длина рабочей очереди сервера для данного процессора. Если в течение длительного времени длина очереди больше 4, то это свидетельствует о перегруженности процессора. Этот счетчик представляет собой конкретное текущее значение, и не является средним значением по некоторому интервалу времени. PERF_COUNTER_RAWCOUNT

[В начало]

6.2. Набор счётчиков мониторинга процессоров

Для контроля производительности процессора Windows 2000, используйте следующий набор дополнительных к указанным выше счетчиков:

Объект \ счетчик Комментарий Тип
Process\% Privileged Time
(% работы в привилегированном режиме)
Процент времени работы процессора в привилегированном режиме, затраченного на обработку не простаивающих потоков (non-Idle threads). Обслуживающий уровень Windows NT (Service layer), исполняющие подпрограммы и ядро Windows NT работают в привилегированном режиме. Драйверы большинства устройств, за исключением графических адаптеров и принтеров, также работают в привилегированном режиме. В отличие от некоторых более ранних операционных систем, Windows NT использует разграничение процессов для защиты подсистем в дополнение к традиционным методам защиты с помощью пользовательского и привилегированного режима. Такое использование процессов подсистем обеспечивает дополнительную защиту. Таким образом, часть времени работы Windows NT по обслуживанию вашего приложения может быть отнесена на счет других процессов подсистем, в добавок ко времени работы системы в привилегированном режиме, затраченном на обработку вашего процесса. PERF_100NSEC_TIMER
Process\% Processor Time
(% загруженности процессора)
Процентное отношение времени процессора, истраченного всеми потоками для данного процесса на выполнение инструкций. Инструкция - это элементарная единица выполняемых компьютером действий, поток - это объект, который занят выполнением инструкций, а процесс - это объект, созданный во время запуска программы на выполнение. Код, выполняемый при обработке некоторых аппаратных прерываний, также может быть отнесен на счет данного процесса. PERF_100NSEC_TIMER
Process\% User Time
(% работы в пользовательском режиме)
Процент времени работы потоков данного процесса в пользовательском режиме. В пользовательском режиме работают приложения, а также подсистемы обеспечения среды (Win32, OS/2 и POSIX), графическая система, драйверы графических устройств, драйверы принтеров и диспетчер управления окнами. Выполняемый в пользовательском режиме код не может нарушить целостности исполняющей системы Windows NT, ядра и драйверов устройств. В отличие от некоторых более ранних операционных систем, Windows NT использует разграничение процессов для защиты подсистем в дополнение к традиционным методам защиты с помощью пользовательского и привилегированного режима. Такое использование процессов подсистем обеспечивает дополнительную защиту. Таким образом, часть времени работы Windows NT по обслуживанию вашего приложения может быть отнесена на счет других процессов подсистем, в добавок ко времени работы системы в привилегированном режиме, затраченном на обработку вашего процесса. PERF_100NSEC_TIMER
Process\Priority Base
(Базовый приоритет)
Текущий базовый приоритет данного процесса. Потоки внутри процесса могут повышать или понижать их собственный базовый приоритет относительно базового приоритета процесса. PERF_COUNTER_RAWCOUNT
Thread\% Privileged Time
(% работы в привилегированном режиме)
Процент времени, истраченного данным потоком на выполнение кода в привилегированном режиме. При обращении к системным службам обычно происходит переход к работе в привилегированном режиме для получения доступа к системным данным. Системные данные защищены от доступа со стороны потоков, выполняемых в пользовательском режиме. Обращения к системе могут быть явными или неявными, например, происходить в результате прерывания или обработки ошибки страницы. В отличие от некоторых более ранних операционных систем, Windows NT использует разграничение процессов для защиты подсистем в дополнение к традиционным методам защиты с помощью пользовательского и привилегированного режима. Такое использование процессов подсистем обеспечивает дополнительную защиту. Таким образом, часть времени работы Windows NT по обслуживанию вашего приложения может быть отнесена на счет других процессов подсистем, в добавок ко времени работы системы в привилегированном режиме, затраченном на обработку вашего процесса. PERF_100NSEC_TIMER
Thread\% Processor Time
(% загруженности процессора)
Процентное отношение времени процессора, истраченного данным потоком на выполнение инструкций. Инструкция - это элементарная единица выполняемых компьютером действий, поток - это объект, который занят выполнением инструкций. Код, выполняемый при обработке некоторых аппаратных прерываний, также может быть отнесен на счет данного потока. PERF_100NSEC_TIMER
Thread\% Processor Time
(% загруженности процессора)
Процентное отношение времени процессора, истраченного данным потоком на выполнение инструкций. Инструкция - это элементарная единица выполняемых компьютером действий, поток - это объект, который занят выполнением инструкций. Код, выполняемый при обработке некоторых аппаратных прерываний, также может быть отнесен на счет данного потока. PERF_100NSEC_TIMER
Thread\% User Time
% работы в пользовательском режиме
Процент времени, истраченного данным потоком на выполнение кода в пользовательском режиме. В пользовательском режиме работают приложения и подсистемы обеспечения среды (Win32, OS/2 и POSIX). Кроме того, Графическая система, драйверы графических устройств, драйверы принтеров и диспетчер управления окнами также выполняются в пользовательском режиме. Выполняемый в пользовательском режиме код не может нарушить целостности исполняющей системы Windows NT, ядра и драйверов устройств. В отличие от некоторых более ранних операционных систем, Windows NT использует разграничение процессов для защиты подсистем в дополнение к традиционным методам защиты с помощью пользовательского и привилегированного режима. Такое использование процессов подсистем обеспечивает дополнительную защиту. Таким образом, часть времени работы Windows NT по обслуживанию вашего приложения может быть отнесена на счет других процессов подсистем, в добавок ко времени работы системы в привилегированном режиме, затраченном на обработку вашего процесса. PERF_100NSEC_TIMER
Thread\Context Switches/sec
(Контекстных переключений/сек)
Частота переключений от одного потока к другому. Переключение потоков может происходить как внутри одного процесса, так и между различными процессами. Переключение потоков может быть вызвано либо тем, что один поток запрашивает информацию у другого потока, либо тем, что один поток вытесняется другим потоком, имеющим более высокий приоритет, когда этот поток с более высоким приоритетом оказывается готовым к выполнению. В отличие от некоторых более ранних операционных систем, Windows NT использует разграничение процессов для защиты подсистем в дополнение к традиционным методам защиты с помощью пользовательского и привилегированного режима. Такое использование процессов подсистем обеспечивает дополнительную защиту. Таким образом, часть времени работы Windows NT по обслуживанию вашего приложения может быть отнесена на счет других процессов подсистем, в добавок ко времени работы системы в привилегированном режиме, затраченном на обработку вашего процесса. Переключение на процесс подсистемы вызывает одно контекстное переключение для потока приложения, обратное переключение вызывает другое контекстное переключение для потока подсистемы. PERF_COUNTER_COUNTER
Thread\Priority Base
(Базовый приоритет)
Текущий базовый приоритет данного потока. Система может увеличить динамический приоритет потока относительно его базового значения, если поток обрабатывает вводимые пользователем данные, или понизить этот приоритет до его базового значения, если поток требует большого количества вычислений. PERF_COUNTER_RAWCOUNT
Thread\Priority Current
(Текущий приоритет)
Текущий динамический приоритет данного потока. Система может увеличить динамический приоритет потока, если поток обрабатывает вводимые пользователем данные, или понизить этот приоритет до его базового значения, если поток требует большого количества вычислений. PERF_COUNTER_RAWCOUNT
Thread\Thread State
(Состояние потока)
Отражает текущее состояние данного потока. Числовые значения этого показателя имеют следующий смысл:
0 - инициализирован (Initialized),
1 - готов (Ready),
2 - выполняется (Running),
3 - простаивает (Standby),
4 - завершен (Terminated),
5 - в ожидании (Wait),
6 - состояние транзита (Transition),
7 - состояние не известно.
Выполняющийся поток (2) использует процессор, простаивающий поток (3) собирается его использовать. Готовый поток (1) хочет использовать процессор, но не может это сделать, поскольку свободные процессоры отсутствуют. Поток в состоянии транзита (6) ожидает получения ресурса, например, может ожидать загрузки с диска страниц стека выполнения. Процесс в состоянии ожидания (5) не нуждается в процессоре, поскольку он ожидает завершения периферийной операции или освобождения ресурса.
PERF_COUNTER_RAWCOUNT

При мониторинге счётчиков производительности процессора следует учитывать, что в многопроцессорных системах могло быть задано соответствие приложений процессорам, когда выбранное приложение может полностью монополизировать один или несколько имеющихся процессоров. Если для повышения производительности MS SQL Server за счет других процессов требуется назначить ему отдельный процессор, выберите в диспетчере задач команду "Задать соответствие". Данный параметр доступен только в многопроцессорных системах. То же самое можно сделать в Enterprise Manager, в свойствах сервера. Там Вы можете указать число процессоров, которое может использовать SQL Server из числа имеющихся.
Изменение соответствия процессоров может повысить производительность путем уменьшения числа сбросов кэша процессора при перемещении потока от одного процессора к другому. Это может значительно повысить производительность SQL Server. Однако имейте в виду, что сопоставление SQL Server определенного процессора может не позволить потокам других программ переходить на менее занятый процессор. Также может потребоваться управления соответствием процессоров для прерываний, генерируемых дисковыми контроллерами или сетевыми платами. На компакт-диске Windows 2000 Resource Kit имеется средство, позволяющее управлять прерываниями таким способом.

Дополнительная информация: SQL Server: Оптимизация производительности ЦП SQL Server

[В начало]

7. Дисковая подсистема

Во время исследования производительности дисковой подсистемы Вы должны попытаться локализовать причину возникновения узкого места в операциях дискового ввода/вывода, осуществляемых SQL Server, используя вначале собственные счётчики сервера баз данных, а для более детального контроля, счетчики PhysicalDisk и LogicalDisk. Счётчики логических дисков контролируют логические диски NT (т.е. имена дисков) в то время как счетчики физических дисков контролируют то, что в оснастке управления дисками видно, как отдельные физические устройства.
Чтобы определить объём ввода/вывода, порождаемый компонентами SQL Server, исследуйте следующие аспекты производительности: Запись страниц на диск и чтение страниц с диска. Количество считанных и записанных страниц, которые использует SQL Server, может быть проверено с помощью счётчиков SQL Server\Buffer Manager\Page Reads/sec и Page Writes/sec. Если эти значения начинают приближаться к пропускной способности аппаратных средств подсистемы ввода/вывода, попробуйте уменьшить их значения, настраивая ваши приложения или базу данных так, чтобы уменьшить операции ввода/вывода (например: охват индексами, улучшение индексов или выполнение нормализации), повысить производительность ввода/вывода имеющихся аппаратных средств, или добавить оперативную память.
Для того, что бы подключить, отключенный по умолчанию из соображений производительности, сбор информации по счётчикам логического диска, которые необходимы для поиска узких мест дисковой подсистемы, запустите из командной строки: diskperf -yv. Для того, что бы прекратить сбор данных этих счётчиков, выполните команду diskperf -nv.

Формат команды:


diskperf [-y[d|v]|-n[d|v] [\\компьютер]

Где:

Отсутствие параметров - выдаёт информацию о том, включены ли счетчики производительности диска на локальном или указанном компьютере и показывает включенные счетчики: для физических дисков, логических дисков или для дисков обоих типов.
-y - Задает запуск счетчика для логического и физического дисков после перезапуска системы.
-yd - После перезапуска системы включает счетчики производительности диска для измерения быстродействия физических дисков. Этот режим устанавливается по умолчанию.
-yv -После перезапуска системы включает счетчики производительности диска для измерения быстродействия логических дисков.
-n - Задает отключение счетчика после перезапуска системы.
-nd - Отключает счетчики производительности для физических дисков после перезапуска системы.
-nv - Отключает счетчики производительности для логических дисков после перезапуска системы.
Компьютер - Задает имя компьютера в сети, состояние счетчика дисковой производительности которого представляет интерес. Если имя компьютера не указано, предполагается компьютер, на котором выполняется команда.

Во время сбора данных по счётчикам производительности диска, журнал статистики счётчиков располагайте на другом диске или компьютере, чтобы процесс журналирования не мешал исследованию диска.
При наличии в системе динамического тома, содержащего несколько физических дисков, они будут выглядеть как "Диск 0 C:", "Диск 1 C:" и "Диск 2 D:", где диск C: состоит из физических дисков 0 и 1. При наличии на диске двух логических разделов, они будут обозначаться как "0 C: D:".
Обычно дисковое устройство содержит один шпиндель, а RAID - массив имеют несколько шпинделей. Аппаратные RAID - массивы представляются в системном мониторе в виде единого диска, а программно организованные дисковые массивы, в виде нескольких томов (экземпляров). Наблюдение за счетчиками физического диска может вестись как для каждого физического диска, так и для всех дисков компьютера (используя экземпляр "_Total").Статистика отдельных дисков RAID массива недоступна, её можно получить с помощью поставляемого к RAID-контроллеру программного обеспечения. Также, при использовании аппаратных дисковых массивов, значение счетчика LogicalDisk| PhysicalDisk\% Disk Time может превышать 100%. Для определения среднего числа системных запросов, ожидающих доступа к диску, используйте в таких случаях счетчик PhysicalDisk\Avg. Disk Queue Length.

[В начало]

7.1. Поиск узких мест использования дисковой подсистемы сервера Windows 2000

Объект \ счетчик Рекомендуемое пороговое значение Комментарий Тип
LogicalDisk|PhysicalDisk\% Disk Time
(Логический|Физический диск\% активности диска)
90% Процент времени, затраченного выбранным дисковым устройством на обработку запросов на чтение и запись данных.
Для регулировки нагрузки на сетевые серверы необходимо знать, какова нагрузка на их жесткие диски. Для этого служит счетчик "% активности диска", показывающий время активности диска в процентах. Если значение счетчика высоко (более 90%), следует проверить значение счетчика "Текущая длина очереди диска" для определения числа системных запросов, ожидающих доступа к диску. Количество ожидающих запросов ввода/вывода в установившемся режиме не должно превышать более чем в 1,5-2 раза количество физических дисков в дисковом устройстве.
Поскольку данные этого счетчика могут охватывать больше чем один физический диск, а следовательно преувеличивать значение дисковой активности, необходимо сравнивать это значение со счётчиком "Процент времени бездействия", что бы откорректировать погрешность.
По умолчанию этот счетчик не может превышать 100%. Однако, Вы можете внести изменения в системный реестр, которые позволят в System Monitor увидеть значения превышающие 100%.
PERF_PRECISION_100NS_TIMER
LogicalDisk|PhysicalDisk\ Disk Reads/sec
(Обращений чтения с диска/сек),
LogicalDisk|PhysicalDisk\Disk Writes/sec
(Обращений записи на диск/сек)
Зависит от спецификаций производителя диска.Обычно диски Ultra Wide SCSI могут выполнять от 50 до 70 операций ввода/вывода в секунду. Обращений чтения с диска/сек - это частота выполнения операций чтения с этого диска.
Обращений записи на диск/сек - это частота выполнения операций записи на этот диск.
Проверьте указанную на диске скорость передачи, чтобы удостовериться, соответствует ли реально наблюдаемая скорость спецификациями.
PERF_COUNTER_COUNTER
LogicalDisk|PhysicalDisk\Current Disk Queue Length
(Текущая длина очереди диска), LogicalDisk|PhysicalDisk\Avg. Disk Queue Length
(Средняя длина очереди диска)
Количество шпинделей плюс 2 Количество невыполненных запросов к диску во время сбора сведений о загруженности. Сюда включаются запросы, обслуживаемые во время проведения замера. Этот показатель представляет собой конкретное текущее значение, и не является средним значением по некоторому интервалу времени. Многошпиндельные дисковые устройства могут обрабатывать одновременно несколько запросов, остальные имеющиеся запросы будут ожидать обслуживания. Этот счетчик может отражать постоянные изменения длины очереди, показывая то большую, то малую ее длину, но если имеется перегрузка дискового устройства, то, вероятно, что значение этого счетчика будет большим постоянно. Время задержки обработки запросов пропорционально длине этой очереди минус количество шпинделей дисковых устройств. Для хорошей производительности системы среднее значение этого счетчика не должно превышать 2.
Current Disk Queue Length является моментальным счётчиком, поэтому используйте несколько значений, измеренные в разные моменты времени. Для получения среднего значения во времени воспользуйтесь счетчиком Avg. Disk Queue Length.
Значения счетчиков "Текущая длина очереди диска" и "% активности диска" позволяют отыскать узкие места в дисковой подсистеме. Если значения счетчиков "Текущая длина очереди диска" и "% активности диска" высоки в течение длительного времени, следует рассмотреть возможность обновления дисков или перемещения некоторых файлов на другие диски.
PERF_COUNTER_RAWCOUNT
LogicalDisk\% Free Space
(Логический диск\ % свободного места)
15% Доля свободного места, имеющегося на логическом диске, по отношению к общему объему выбранного логического диска.
При вычислении значения _Total, счетчики %Free Space пересчитываются, как сумма процентов каждого диска.
Не существует счетчика % Free Space для физических дисков.
PERF_RAW_FR ACTION
LogicalDisk|PhysicalDisk\Avg. Disk Bytes/Transfer
(Средний размер одного обмена с диском (байт))
>20 Кбайт Среднее количество байт данных, переданных при выполнении операций чтения или записи. Показывает объём операций ввода - вывода. Диск является эффективным, если он передает большие количества данных относительно быстро. Следите за этим счетчиком при измерении максимальной производительности. Также следует проверить показания счетчика "Средний размер одного обмена с диском (байт)".
Значение больше 20 Кбайт обычно говорит о хорошей производительности диска, меньшие значения будут в случае, если приложение использует диск неэффективно. Например, если приложения обращающиеся к данным на диске в произвольном порядке, увеличивается значение счетчика "Среднее время обращения к диску (сек)", так как передача данных случайным образом увеличивает время поиска данных на диске.
Чтобы более детально анализировать передаваемые данные, используйте счётчик Avg. Disk Bytes/Read и Avg. Disk Bytes/Write
PERF_AVERAGE_BULK
LogicalDisk|PhysicalDisk\Avg. Disk sec/Transfer
(Среднее время обращения к диску)
< 0,3 секунды Время в секундах, затрачиваемое в среднем на один обмен данными с диском.
Счетчик отражает время, затрачиваемое на выполнение запросов к диску. Большое значение говорит о том, что контроллер диска постоянно повторяет попытки обращения к диску из-за его неисправности. Эти повторные попытки увеличивают среднее время обращения к диску. Для большинства дисков наибольшее среднее время обращения составляет не более 0,3 секунды. Для дальнейшего анализа обмена данными используйте счётчики Avg. Disk sec/Read и Avg. Disk sec/Write.
PERF_AVERAGE_TIMER

[В начало]

7.2. Набор счётчиков мониторинга дисковой подсистемы

Для контроля производительности дисковой подсистемы сервера Windows 2000, используйте следующий набор, дополнительных к указанным выше, счётчиков:

Объект \ счетчик Комментарий Тип
LogicalDisk|PhysicalDisk\% Disk Read Time
(% активности диска при чтении)
Процент времени, затраченного выбранным дисковым устройством на обработку запросов на чтение данных. PERF_PRECISION_100NS_TIMER
LogicalDisk|PhysicalDisk\% Disk Write Time
(% активность диска при записи)
Процент времени, затраченного выбранным дисковым устройством на обработку запросов на запись данных. PERF_PRECISION_100NS_TIMER
PhysicalDisk\% Idle Time
Говорит о том, какую часть времени интервала измерения диск бездействовал.
Как уже говорилось выше, если этот счетчик анализировать совместно с % Disk Time, помните, что % Disk Time может превышать 100 процентов, т.к. он может завышать значения использования дисков.
PERF_PRECISION_100NS_TIMER
LogicalDisk\Avg. Disk Bytes/Read
(Средний размер одного чтения с диска (байт))
Среднее количество байт данных, полученных с диска при выполнении операций чтения. PERF_AVERAGE_BULK
LogicalDisk\Avg. Disk Bytes/Write
(Средний размер одной записи на диск (байт))
Среднее количество байт данных, переданных на диск при выполнении операций записи. PERF_AVERAGE_BULK
LogicalDisk|PhysicalDisk\Avg. Disk Queue Length
(Средняя длина очереди диска)
Среднее общее количество запросов на чтение и на запись, которые были поставлены в очередь для соответствующего диска в течение интервала измерения.
Вычисляется число запросов, которые были поставлены в очередь и ожидают обращения к диску в течение базового интервала измерения, а также запросов на обслуживание. В итоге, может показывать завышенные значения.
Если более двух запросов непрерывно ожидают обращения к одной дисковой подсистеме, диск может быть узким местом. Чтобы уточнить данные о длине очереди, используйте счётчики: Avg. Disk Read Queue Length и Avg. Disk Write Queue Length.
PERF_COUNTER_LARGE_QUEUELEN_TYPE
LogicalDisk\Avg. Disk Read Queue Length
(Средняя длина очереди чтения диска)
Среднее количество запросов на чтение, которые были поставлены в очередь для соответствующего диска в течение интервала измерения. PERF_COUNTER_LARGE_QUEUELEN_TYPE
LogicalDisk\Avg. Disk Write Queue Length
(Средняя длина очереди записи на диск)
Среднее количество запросов на запись, которые были поставлены в очередь для соответствующего диска в течение интервала измерения. PERF_COUNTER_LARGE_QUEUELEN_TYPE
LogicalDisk\Avg. Disk sec/Read
(Среднее время чтения с диска)
Время в секундах, затрачиваемое в среднем на одну операцию чтения данных с диска. PERF_AVERAGE_TIMER
LogicalDisk\Avg. Disk sec/Write
(Среднее время записи на диск)
Время в секундах, затрачиваемое в среднем на одну операцию записи данных на диск. PERF_AVERAGE_TIMER
LogicalDisk|PhysicalDisk\Disk Bytes/sec
(Скорость обмена с диском (байт/сек))
Показывает пропускную способность дисковой системы.Это скорость, с которой происходит обмен данными с диском при выполнении операций чтения или записи.Для дальнейшего анализа данных об обмене, основанных на чтений и записи, используйте счётчики: Disk Read Bytes/sec и Disk Write Bytes/sec соответственно. PERF_COUNTER_BULK_COUNT
LogicalDisk\Disk Read Bytes/sec
(Скорость чтения с диска (байт/сек))
Скорость, с которой происходит передача данных с этого диска при выполнении операций чтения. PERF_COUNTER_BULK_COUNT
LogicalDisk|PhysicalDisk\Disk Transfers/sec
(Обращений к диску/сек)
Частота выполнения операций чтения и записи на этот диск.
Вычисляется число операций чтения и записи в секунду, независимо от того, сколько данных они включают.
Измеряет утилизацию дисков.
Если значение превышает 50 (у физического диск, состоящего из набора страйпов), то вероятно возникновение узкого места.
Продолжить анализ обмена данными при операциях чтения и записи можно с помощью счётчиков: Disk Read/sec и Disk Writes/sec соответственно.
PERF_COUNTER_COUNTER
LogicalDisk\Disk Write Bytes/sec
(Скорость записи на диск (байт/сек))
Скорость, с которой происходит передача данных на этот диск при выполнении операций записи. PERF_COUNTER_BULK_COUNT
LogicalDisk\Free Megabytes
(Свободно мегабайт)
Показывает объем незанятого пространства на диске в мегабайтах. Один мегабайт равен 1048576 байтам.
Не существует подобного Free Megabytes счетчика для физических дисков.
PERF_COUNTER_RAWCOUNT
LogicalDisk|PhysicalDisk\Split IO/sec
(Расщепления ввода-вывода/сек)
Вычисляет частоту, с которой операции ввода-вывода диска оказываются расщепленными на несколько операций ввода-вывода. Расщепление операций ввода-вывода может происходить либо из-за того, что запрошен слишком большой блок данных, который не может быть передан за одну операцию, либо из-за фрагментации диска.
На расщепление I/O запроса влияет дизайн прикладных программ, файловая система или драйверы. Высокая норма расщеплений I/O не может сам по себе представлять проблему. Однако, если речь идёт о единичном диске, высокая норма для этого счетчика может указывать на фрагментацию диска.
PERF_COUNTER_COUNTER

[В начало]

8. Сеть

Счётчики производительности сети позволяют контролировать работу сетевых интерфейсов и протоколов по всем уровням модели Open Systems Interconnect (OSI), от физического до прикладного.

Уровень OSI Объекты производительности Примеры счётчиков
Application, Presentation Browser, Server, Redirector и Server Work Queues
Для наблюдения за сервером служат счетчики объекта "Server", а для наблюдения за компьютером-клиентом пользователя - счетчики объекта "Redirector". (Некоторые процессы уровня приложения, такие как веб-серверы, могут обладать собственными счетчиками, служащими для наблюдения за передачей данных на этом уровне).
Redirector\Current Commands
(Активных команд)
Redirector\Network Errors/sec
(Сетевых ошибок/сек)
Redirector\Reads Denied/sec
(Отказов на операцию чтения/сек)
Redirector\Writes Denied/sec
(Отказов на операцию записи/сек)
Redirector\Server Sessions Hung
(Зависаний сеансов сервера)
Server\Server\Sessions Errored Out
(Сеансов, закрытых из-за возникновения ошибки)
Server\Work Item Shortages
(Нехваток рабочих элементов)
Server\Pool Paged Peak
(Выгружаемый пул (пик))
Server\Pool Nonpaged Failures
(Отказов невыгружаемого страничного пула)
Session NBT Connection (NBT - сокращение от NetBT, что означает NetBIOS поверх TCP/IP; NetBIOS это основная сетевая система ввода - вывода) NBT Connection\Bytes Total/sec(Всего байт/сек) - скорость, с которой данный компьютер получает или посылает байты через подключение NBT к какому-либо удаленному компьютеру. Подсчитываются все байты, полученные или посланные данным компьютером через конкретное подключение NBT. Тип: PERF_COUNTER_BULK_COUNT
Transport Объекты протоколов: TCP - Transmission Control Protocol; UDP - User Datagram Protocol, NetBEUI для NetBIOS, AppleTalk (установленные дополнительные протоколы) Protocol_layer_object\Segments Received/sec
(Получено сегментов/сек)
Protocol_layer_object\Segments Retransmitted/sec
(Переотправлено сегментов/сек)
Protocol_layer_object\Segments/sec
(Сегментов/сек)
Protocol_layer_object\Segments Sent/sec
(Отправлено сегментов/сек)
Network Network Segment (Сегмент сети появляется после установки драйвера сетевого монитора, IP для протокола интернет, NWLink IPX/SPX для поддержки Internetwork Packet eXchange / Sequenced Packet Exchange). Network Segment\% Network Utilization(Процент утилизации сети), тип: PERF_COUNTER_MULTI_TIMER
Data Link, Physical Network Interface
Эти счетчики поддерживаются драйвером и могут иметь неточные или нулевые значения из-за проблем с драйвером
Network Interface\Bytes Total/sec
(Всего байт/сек)
Network Interface\Bytes Sent/sec
(Отправлено байт/сек)
Network Interface\Bytes Received/sec
(Получено байт/сек)

Значения счётчиков производительности сети зависят от текущей производительности других компонент сервера, и наоборот, производительность других компонент может зависеть от компонент сети. Например, если наблюдается увеличение обмена страниц с одновременным уменьшением Server\Bytes Total/sec, это говорит о нехватке оперативной памяти для обеспечения сетевых операций. Сетевые интерфейсы и протоколы активно используют невыгружаемую память, а избыточный свопинг может быть спровоцирован как раз тем, что большая часть ОЗУ была отдана для обеспечения сетевых операций. В таком случае, для сервера баз данных, который также использует выгружаемую память, её может остаться слишком мало. Поэтому, наряду со счётчиками сети, рекомендуется одновременно измерять и другие счётчики для кэша, дисковой подсистемы, памяти, процессоров и системы, которые уже рассматривались в предыдущих главах настоящей статьи:


Cache\Data Map Hits %
Cache\Fast Reads/sec
Cache\Lazy Write Pages/sec
Logical Disk\% Disk Space
Memory\Available Bytes
Memory\Nonpaged Pool Allocs
Memory\Nonpaged Pool Bytes
Memory\Paged Pool Allocs
Memory\Paged Pool Bytes
Processor(_Total)\% Processor Time
System\Context Switches/sec
System\Processor Queue Length
Processor(_Total)\Interrupts/sec

Если анализ этих счётчиков не показывает наличия узких мест в производительности других компонент, значения счётчиков сети будут наиболее близки к истинной производительности.
Возможно также и обратное влияние, когда сеть или сетевой интерфейс не могут обеспечить необходимой пропускной способности или производительности для загрузки сервера баз данных и становятся узким местом производительности системы в целом.

[В начало]

8.1. Поиск узких мест сети

Следующие счетчики позволяют обнаружить узкие места в сети:

Объект \ счетчик Рекомендуемое пороговое значение Комментарий Тип
Redirector\Current Commands
(Активных команд)
<= число сетевых плат Подсчитывает количество запросов к Перенаправителю, которые ожидают обработки в настоящий момент. Если это число много больше, чем число плат сетевых адаптеров, установленных на этом компьютере, то это означает, что сеть (сети) и/или сервер (серверы), к которым осуществляется доступ, серьезно перегружены. Вы можете увеличить максимально допустимую задержку для сетевых команд в ключе системного реестра MaxCmds
HKLM\ SYSTEM\ CurrentControlSet\ Services\ lanmanserver\ parameters
Значение по умолчанию - 5.
PERF_COUNTER_ RAWCOUNT
Server\Bytes Total/sec
(Всего байт/сек)
< максимальная скорость передачи в сети Количество байт, которое сервер послал или получил через сеть. Это значение отражает общую занятость сервера.
Если сумма значений счетчиков "Всего байт/сек" для всех серверов приближается к максимальной скорости передачи данных по сети, возможно, следует разделить сеть на сегменты.
PERF_COUNTER_ BULK_COUNT
Server\Work Item Shortages
(Нехваток рабочих элементов)
<= 3 Work Item (Рабочий элемент) - место, где сервер хранит SMB (Server Message Block). Счётчик показывает количество ответов STATUS_DATA_NOT_ACCEPTED (данные не приняты) во время получения индикации. Это происходит в том случае, если нет доступных рабочих элементов и невозможно выделить новые рабочие элементы для обслуживания поступившего запроса. Показывает, не нуждаются ли в изменении параметры сервера InitWorkItems или MaxWorkItems.Количество колеблется между минимальным и максимальным значением, которое зависит от конфигурации сервера и объема памяти. Если встречаются нехватки рабочих элементов, это может быть вызвано перегрузкой сервера, и если значение достигает указанного порога, попробуйте изменить значения реестра InitWorkItems и MaxWorkItems:
HKLM\ SYSTEM\ CurrentControlSet\ Services\ LanmanServer\ Parameters
Значение MaxWorkItems может изменяться от 1 до 512. Подробную информацию об этом можно получить в Microsoft Knowledge Base
Внимание! Внесение в реестр неправильных изменений может серьезно повредить систему. Перед изменением реестра создайте резервную копию всех важных данных.
PERF_COUNTER_ COUNTER
Server\Context Blocks Queued/sec
(Поставленных в очередь контекстных блоков/сек)
<= 50ms Частота, с которой рабочие контекстные блоки попадают в очередь FSP (file system process) данного сервера, где они ожидают обработки.Если значения этого счетчика долго превышает 50 миллисекунд, служба Server является узким местом для удаленных клиентов, которые запрашивают I/O на сервере. PERF_COUNTER_ COUNTER
Server Work Queues\Queue Length
(Длина очереди)
<= 4 Текущая длина рабочей очереди сервера для данного процессора. Если в течение длительного времени длина очереди больше 4, то это свидетельствует о перегруженности процессора. Этот счетчик представляет собой конкретное текущее значение, и не является средним значением по некоторому интервалу времени.
Показывает нормальное значение в байтах величины обмена сервера с клиентом в сети для данного процессора. Это значение - мера загруженности сервера.
PERF_COUNTER_ BULK_COUNT
Server Work Queues\Work Item Shortages
(Нехваток рабочих элементов)
= 0 Каждый запрос клиента представлен на сервере в качестве рабочего элемента (work item), и сервер поддерживает пул доступных рабочих элементов для каждого процессора с целью ускорения обработки. Рабочий элемент - место, где сервер хранит SMB (Server Message Block). Если в течение длительного времени этот счетчик больше 0, то следует увеличить значение MaxWorkItems в системном реестре для службы сервера.
HKLM\ SYSTEM\ CurrentControlSet\ Services\ LanmanServer\P arameters\ Maxworkitems
Данное значение всегда будет равно 0 для Blocking Queue.
PERF_COUNTER_ RAWCOUNT
Network Interface\Output Queue Length
(Длина очереди вывода)
<= 2 Количество исходящих пакетов в очереди. Если эта длина больше 2, то это означает, что возникают задержки, поэтому необходимо обнаружить причину их возникновения и устранить её, если это возможно. При длине очереди большей двух, адаптер не сможет поддерживать оптимальный темп передачи. PERF_COUNTER_ RAWCOUNT
Network Interface\Bytes Total/sec
(Всего байт/сек)
65 % от максимальной пропускной способности сети Скорость, с которой происходит получение или посылка байт через сетевой интерфейс, включая символы обрамления (framing characters). Этот счётчик должен иметь высокое значение, что указывает на большое количество успешных передач. Сравните это значение со значением счетчика Network Interface\Current Bandwidth, отражающего пропускную способность адаптеров. Если Вы видите что норма Bytes Total/sec приближающуюся к максимальной скорости передачи, повышается вероятность коллизии в сети. Это, в свою очередь, воздействует на производительность, увеличивая время ожидания прохождения пакета по сети. В этом случае, можно рассмотреть возможность увеличения пропускной способности сети или её сегментации. Например, при использовании более быстрого Ethernet адаптера на 100 мегабит/сек, если норма байт, переданных в секунду приближается к 65 процентам от максимальной пропускной способности сети, производительность может улучшится если использовать Гигабитный или более быстрый Ethernet-адаптер, или разбить сеть на сегменты (меньшие сети). PERF_COUNTER_ COUNTER
Network Segment\% Network Utilization
(% использования сети)
<= 40 % Индикатор загрузки сети относительно её полной пропускной способности. Пороговое значение зависит от топологии и инфраструктуры сети. Если значение счетчика для сетей Ethernet превышает 30-40 процентов, коллизии могут вызывать неполадки. Величина порога разная для разных типов сетей и проще всего её определить эмпирическим путём. PERF_COUNTER_ MULTI_TIMER

При контроле счётчиков протоколов, стоит в первую очередь беспокоится о величине трафика. Для этого, используйте счётчики: Bytes Total/sec, Datagrams Received/sec, Datagrams Sent/sec, Frames Received/sec и Frames Sent/sec. При рассмотрении счётчиков передачи, учитывайте пропускную способность вашей сети. Значение Bytes Total/sec не должно быть близко к пропускной способности сети.
Ниже представлен список типичных объектов для протокола, контролируя которые Вы получите информацию об использовании сети:

Для протокола TCP/IP, используйте объекты TCP, IP, UDP и Internet Control Message Protocol (ICMP). Чтобы контролировать трафик на сетевом уровне, используйте счетчики объекта IP Datagrams Forwarded/sec, Datagrams Received/sec, Datagrams/sec и Datagrams Sent/sec. Для контроля на транспортном уровне, используйте счетчики TCP Segments Received/sec, Segments Retransmitted/sec, Segments/sec и Segments Sent/sec. ICMP используется для поддержания таблиц маршрутизации и диагностирования проблем Объект производительности ICMP состоит из счетчиков, измеряющих частоты отправки и получения сообщений по протоколу ICMP. Он также включает счетчики наблюдения за ошибками протокола ICMP.UDP используется для DNS имён хостов и определения IP адресов, а также для разрешения Network Basic Input/Output System (NetBIOS) имён сервером WINS. Величина передачи и получения сегментов по сети должна быть высокой, иначе, постарайтесь уменьшить широковещательный трафик. UDP\Datagrams/sec указывает на величину широковещательного трафика (отправка и получение), и его значение должно быть низким. Если величина повторных попыток передачи высока, могут иметься аппаратные проблемы, поэтому Вы должны далее исследовать счетчики системы, например - процессора. Счетчики объектов ICMP и UDP, полезны для более подробного наблюдения за передачей данных по протоколу TCP/IP. Используйте пороговые значения, чтобы определить, какие счетчики выходят из допустимого диапазона и могут указывать на проблемы.

Для того чтобы контролировать протокол NWLink, используйте следующий три объекта:

  • NWLink IPX - для компьютеров, поддерживающих связь по протоколу IPX.
  • NWLink NetBIOS - для компьютеров, поддерживающих связь по протоколу IPX.
  • NWLink SPX - для компьютеров, соединяющихся по протоколу SPX.

Каждый из этих объектов имеет следующие счетчики, которые предоставляют информацию о сетевом трафике:

  • Bytes Total/sec
  • Frame Bytes Sent/sec
  • Frame Bytes Received/sec
  • Frames Rejected/sec

В активно использующейся сети счётчик Bytes Total/sec должен иметь высокое значение, Frames Rejected/sec низкое.
Примечание: Имейте в виду, что счетчики кадров (фреймов) этих объектов всегда возвращают нулевые значения.

Для протокола NetBEUI, используйте объекты NetBEUI и NetBEUI Resource. Контролируйте Bytes Total/sec и другие счетчики, например: NetBEUI\Frame Bytes Received/sec и NetBEUI\Frame Bytes Sent/sec. Кроме того, проследите за ростом Frames Rejected/sec. Также следите за NetBEUI Resource\Times Exhausted, который указывает, как используются буфер ресурса. Информация об объектах ресурса также регистрируется в журнале event log.

Для протокола AppleTalk, используйте счетчики объекта AppleTalk. Для информации об этих счетчиках, см. раздел "Performance Counter Reference" в Windows 2000 Resource Kit companion CD.

Далее будут представлены счётчики, которые могут помочь в выяснении причин возникновения узкого места в сети или уточнения его источника.

[В начало]

8.2. Набор счётчиков мониторинга сети

В этой главе представлены счётчики, которые могут помочь в выяснении причин возникновения узкого места в сети или уточнения его источника

[В начало]

8.2.1. Browser (Обозреватель сети)

Основная функция службы Browser - это поддержание списка компьютеров, совместно использующих ресурсы в домене наряду со списком других доменов и имён рабочих группы в сети WAN. Этот список поддерживается на клиенте, который показывает сетевые ресурсы в My Network Places (Мое сетевое окружение) или выводится командой NET VIEW. Active Directory заменяет службу Browser, используемую в более ранних версиях Windows для поддержки разрешения имён Network Basic Input/Output System (NetBIOS). Служба Browser в Windows 2000 поддерживает обратную совместимость с компьютерами, на которых установлена более ранняя версия Windows.
Объект производительности Browser состоит из счетчиков, которые измеряют величины объявлений, перечислений и другого трафика обозревателя сети. Если ваша организация использует домены версии Windows NT 4.0, используйте представленные ниже счётчики для контроля службы Browser:

Объект \ счетчик Комментарий Тип
Browser\Mailslot Allocations Failed
(Ошибок распределения почтовых слотов)
Количество неудачных попыток получателя датаграмм выделить буфер для размещения пользовательской записи в почтовый слот. PERF_COUNTER _RAWCOUNT
Browser\Mailslot Opens Failed/sec
(Ошибок открытия почтового слота/сек)
Частота принятых данной рабочей станцией сообщений почтовых слотов, которые должны быть доставлены в почтовые слоты, отсутствующие на данной рабочей станции. PERF_COUNTER _COUNTER
Browser\Mailslot Receives Failed
(Ошибок приема в почтовый слот)
Показывает количество сообщений, направленных в почтовый слот, которые не удалось принять из-за ошибок транспортировки. PERF_COUNTER _RAWCOUNT
Browser\Mailslot Writes Failed
(Ошибок записи в почтовый слот)
Общее количество сообщений, направленных в почтовый слот и успешно принятых, но которые не удалось записать в почтовый слот. PERF_COUNTER _RAWCOUNT
Browser\Missed Mailslot Datagrams
(Промахов датаграмм почтовых слотов)
Количество датаграмм почтовых слотов, которые были отброшены из-за ограничений настройки или выделения. PERF_COUNTER _RAWCOUNT
Browser\Missed Server Announcements
(Промахов объявлений серверов)
Количество объявлений серверов, которые были потеряны из-за ограничений настройки или выделения. PERF_COUNTER _RAWCOUNT
Browser\Missed Server List Requests
(Промахов запросов на список серверов)
Количество запросов на получение списка серверов-обозревателей сети, которые были получены данной рабочей станцией, но не были обработаны. PERF_COUNTER _RAWCOUNT
Browser\Server Announce Allocations Failed/sec
(Ошибок распределения объявлений сервера/сек)
Частота, с которой объявления сервера (или домена) не обрабатываются из-за нехватки памяти. PERF_COUNTER _COUNTER

[В начало]

8.2.2. Server

Служба Server поддерживает совместное использование файлов и печати и важна для связи между локальными и удалёнными процессами. Её партнёром является служба Workstation, которая обеспечивает сетевые подключения и связь. Компьютер использует службу Workstation, чтобы посылать запросы серверу; служба Server отвечает на эти запросы. Компьютер - сервер может использовать оба этих сервиса.

Объект \ счетчик Комментарий Тип
Server\Blocking Requests Rejected
(Отвергнуто запросов блокирования)
Количество отвергнутых попыток сервера блокировать SMB (Server Message Block) из-за недостаточного количества свободных рабочих элементов. Показывает, не нуждаются ли в изменении параметры сервера MaxWorkItem или MinFreeWorkItems. PERF_COUNTER _COUNTER
Bytes Received/sec
(Получено байт/сек)
Количество байт, которые сервер получил из сети. Отражает степень занятости сервера. PERF_COUNTER _BULK_COUNT
Server\Bytes Transmitted/sec
(Передано байт/сек)
Количество байт, которые сервер послал по сети. Отражает степень занятости сервера. PERF_COUNTER _BULK_COUNT
Server\Errors System
(Ошибок системы)
Количество обнаруженных внутренних ошибок сервера. Непредусмотренные ошибки обычно свидетельствуют о наличии неполадок Сервера. PERF_COUNTER _RAWCOUNT
Server\Pool Nonpaged Failures
(Отказов невыгружаемого страничного пула)
Количество отказов при выделении памяти из невыгружаемого страничного пула. Показывает, что объем оперативной памяти данного компьютера слишком мал. PERF_COUNTER _COUNTER
Server\Pool Nonpaged Peak
(Невыгружаемый пул (пик))
Максимальное количество байт из невыгружаемого страничного пула, когда либо использовавшееся сервером. Показывает, какое количество оперативной памяти нужно на этом компьютере. PERF_COUNTER _RAWCOUNT
Server\Pool Paged Failures
(Отказов выгружаемого страничного пула)
Количество отказов при выделении памяти из выгружаемого страничного пула. Показывает что объем оперативной памяти данного компьютера или страничный пул слишком малы. PERF_COUNTER _RAWCOUNT
Server\Pool Paged Peak
(Выгружаемый пул (пик))
Максимальное количество байт из выгружаемого страничного пула, когда либо использовавшееся сервером. Позволяет определить подходящие размеры файлов подкачки (страничных файлов) и оперативной памяти. PERF_COUNTER _RAWCOUNT
Server\Sessions Errored Out
(Сеансов, закрытых из-за возникновения ошибки)
Подсчитывает количество сеансов, закрытых из-за возникновения непредусмотренных ошибок или сеансов, которые были закрыты по таймауту автоотключения - из-за того, что их время бездействия превысило значение параметра автоматического отключения и было успешно отключено. PERF_COUNTER _RAWCOUNT

[В начало]

8.2.3. Redirector (Перенаправитель)

Используйте счетчики объекта Redirector для службы Workstation, а объекты Server и Server Work Queues для службы Server. Счетчики для этих объектов описывают действия на уровне представления (presentation layer) в архитектуре сети.

Объект \ счетчик Комментарий Тип
Redirector\Bytes Total/sec
(Всего байт/сек)
Скорость, с которой Перенаправитель обрабатывает байты данных. Сюда включаются все данные приложений и файлов, а также вспомогательная информация протоколов, например, заголовки пакетов. PERF_COUNTER _BULK_COUNT
Redirector\Network Errors/sec
(Сетевых ошибок/сек)
Подсчитывает частоту возникновения серьезных непредвиденных ошибок, которые обычно означают, что Перенаправитель и один или несколько серверов испытывают серьезные трудности при обмене данными. Например, ошибка протокола SMB (Server Message Block) вызывает возникновение сетевой ошибки. В результате такого события делается запись в системном журнале событий, куда можно обратиться за более подробными сведениями.
Вы можете увеличить значение ключа системного реестра SessTimeout
HKLM\ System\ CurrentControlSet\ Services\ LanmanWorkstation\ Parameters
Значение по умолчанию - 45 секунд. Ключ может принимать значения от 10 до 65535.
PERF_COUNTER _COUNTER
Redirector\Reads Denied/sec
(Отказов на операцию чтения/сек)
Частота, с которой сервер оказывается не в состоянии разместить запросы на операции непосредственного чтения. Когда требуется прочитать большой объем данных, намного превышающий размер согласованного буфера сервера, Перенаправитель запрашивает выполнение операции непосредственного чтения (Raw Read), которая позволяет передавать данные без большого количества сопровождающих протокольных данных для каждого пакета. Для того чтобы выполнить такую операцию, сервер должен запретить на это время выполнение других запросов, поэтому в подобном запросе будет отказано, если сервер в настоящий момент действительно занят. PERF_COUNTER _COUNTER
Redirector\Server Sessions Hung
(Зависаний сеансов сервера)
Подсчитывает количество активных сеансов, которые были прекращены по таймауту (из-за истечения максимального срока получения ответа) и которые нельзя было продолжить из-за того, что удаленный сервер не отвечал. PERF_COUNTER _RAWCOUNT
Redirector\Writes Denied/sec
(Отказов на операцию записи/сек)
Частота, с которой сервер оказывается не в состоянии разместить запросы на операции непосредственной записи. Когда требуется прочитать большой объем данных, намного превышающий размер согласованного буфера сервера, Перенаправитель запрашивает выполнение операции непосредственной записи (Raw Write), которая позволяет передавать данные без большого количества сопровождающих протокольных данных для каждого пакета. Для того чтобы выполнить такую операцию, сервер должен запретить на это время выполнение других запросов, поэтому в подобном запросе будет отказано, если сервер в настоящий момент действительно занят. PERF_COUNTER _COUNTER

[В начало]

8.2.4. Server Work Queues (Рабочая очередь сервера)

Объект производительности Server Work Queues состоит из счетчиков, которые контролируют длину очередей и объектов в очередях:

Объект \ счетчик Комментарий Тип
Server Work Queues\Bytes Transferred/sec
(Передано байт/сек)
Скорость, с которой сервер отправляет и принимает байты данных от сетевых клиентов для данного процессора. Это значение отражает степень загрузки сервера. PERF_COUNTER _BULK_COUNT
Server Work Queues\Total Bytes/sec
(Всего байт/сек)
Скорость, с которой сервер считывает или записывает данные в файлы по запросу клиентов для данного процессора. Это значение отражает степень загрузки сервера. PERF_COUNTER _BULK_COUNT
Server Work Queues\Total Operations/sec
(Всего файловых операций/сек)
Частота, с которой сервер выполняет операции чтения или записи в файлы по запросу клиентов для данного процессора. Это значение отражает степень загрузки сервера. Это значение всегда будет равно 0 для 'Blocking Queue'. PERF_COUNTER _BULK_COUNT

[В начало]

8.2.5. Transmission Control Protocol

Объект производительности Transmission Control Protocol (TCP) состоит из счетчиков, которые оценивают отправку и получение пакетов TCP. Он включает счетчики, которые контролируют число TCP подключений в каждом состоянии.

Объект \ счетчик Комментарий Тип
TCP\Connection Failures
(Отказов подключений)
Число переходов TCP-подключений в состояние CLOSED из состояний SYN-SENT или SYN-RCVD, плюс число переходов TCP-подключений в состояние LISTEN из состояния SYN-RCVD. PERF_COUNTER _RAWCOUNT
TCP\Connections Active(
Активных подключений)
Количество TCP-подключений, перешедших в состояние SYN-SENT непосредственно из состояния CLOSED. PERF_COUNTER _RAWCOUNT
TCP\Connections Established
(Установлено подключений)
Количество TCP-подключений, имеющих текущее состояние ESTABLISHED или CLOSE-WAIT. PERF_COUNTER _RAWCOUNT
TCP\Connections Passive
(Пассивных подключений)
Количество TCP-подключений, перешедших в состояние SYN-RCVD непосредственно из состояния LISTEN. PERF_COUNTER _RAWCOUNT
TCP\Connections Reset
(Сбросов подключений)
Число переходов TCP-подключений в состояние CLOSED непосредственно из состояний ESTABLISHED или CLOSE-WAIT. PERF_COUNTER _RAWCOUNT
TCP\Segments/sec
(Сегментов/сек)
Частота отправления или получения TCP-сегментов с помощью протокола TCP. Segments/sec - сумма значений TCP\Segments Received/sec и TCP\Segments Sent/sec. PERF_COUNTER _COUNTER
TCP\Segments Received/sec
(Получено сегментов/сек)
Частота получения TCP-сегментов, включая сегменты, полученные с ошибками. Этот счетчик учитывает сегменты, получаемые через установленные подключения. Является подмножеством TCP\Segments/sec. PERF_COUNTER _COUNTER
TCP\Segments Retransmitted/sec
(Переотправлено сегментов/сек)
Частота переотправления TCP-сегментов, т.е. отправления сегментов, содержащих ранее отправленные данные. PERF_COUNTER _COUNTER
TCP\Segments Sent/sec
(Отправлено сегментов/сек)
Частота отправления TCP-сегментов. Этот счетчик учитывает сегменты, направляемые через установленные подключения, но не учитывает сегменты, содержащие только переотправляемые данные. Segments Sent/sec - подмножество TCP\Segments/sec. PERF_COUNTER _COUNTER

[В начало]

8.2.6. NetBEUI

Если Вы используете протокол NetBEUI, используйте следующий набор счётчиков:

Объект \ счетчик Комментарий Тип
NetBEUI\Frame Bytes/sec
(Получено байт/сек)
Скорость, с которой происходит получение байтов через сетевой интерфейс, включая символы обрамления (framing characters). PERF_COUNTER _BULK_COUNT
NetBEUI\Frames Received/sec
(Получено пакетов/сек)
Частота, с которой происходит получение пакетов через сетевой интерфейс. PERF_COUNTER _COUNTER
NetBEUI\Frames Rejected/sec
(Отброшено полученных пакетов)
Отброшено полученных пакетов - это количество полученных пакетов, которые были отброшены, хотя и не было зафиксировано каких-либо ошибок, препятствующих их передаче протоколу верхнего уровня. Одна из возможных причин отбрасывания таких пакетов - необходимость освободить место в буфере. PERF_COUNTER _COUNTER
NetBEUI Resource\Times Exhausted
(Ресурсы были исчерпаны)
Показывает сколько раз все ресурсы (буферы) были полностью утилизированы. Число в круглых скобках после имени ресурса идентифицирует этот ресурс в сообщениях Event Log. PERF_COUNTER _RAWCOUNT

[В начало]

8.2.7. User Data Protocol

Объект производительности User Data Protocol (UDP) состоит из счетчиков, которые оценивают отправку и получение UDP датаграмм. Он включает счетчики мониторинга ошибок UDP.

Объект \ счетчик Комментарий Тип
UDP\Datagrams No Port/sec
(Датаграмм 'No Port'/сек)
Частота получения UDP-датаграмм для которых отсутствует приложение в порту местоназначения (no application at the destination port). PERF_COUNTER _COUNTER
UDP\Datagrams Received Errors
(Получено датаграмм с другими ошибками)
Частота получения UDP-датаграмм, которые не могут быть доставлены по каким-либо другим причинам, отличным от отсутствия приложения в порту местоназначения. PERF_COUNTER _RAWCOUNT
UDP\Datagrams Received/sec
(Получено датаграмм/сек)
Частота, с которой UDP-датаграммы доставляются пользователям протокола UDP. PERF_COUNTER _COUNTER
UDP\Datagrams Sent/sec
(Отправлено датаграмм/сек)
Частота, с которой UDP-датаграммы отправляются из данного узла. PERF_COUNTER _COUNTER
UDP\Datagrams/sec
(Датаграмм/сек)
Частота отправления или получения UDP-датаграмм данным узлом. PERF_COUNTER _COUNTER

[В начало]

8.2.8. Network Segment (Сегмент сети)

Если суммарный трафик в сети выше её пропускной способности, сеть может стать узким местом производительности клиент - серверных приложений. Для наблюдения за объемом трафика сети, особенно в сетях с мостами и маршрутизаторами, используя счётчики Network Segment.
Чтобы использовать эти счётчики, Вы должны установить драйвер Network Monitor на компьютере, где запускается System Monitor и на том компьютере, с которого Вы собираете данные производительности.

Объект \ счетчик Комментарий Тип
Network Segment\Broadcast Frames Received/sec
(Получено Broadcast-кадров/сек)
Служит для определения среднего значения за период времени. Значительные отклонения от среднего значения следует проанализировать для определения причины неполадок. Так как каждый компьютер обрабатывает каждый широковещательный пакет, большое число таких пакетов снижает производительность сети. Показание счётчика лучше анализировать на продолжительных интервалах измерений. PERF_COUNTER _COUNTER
Network Segment\Total Frames Received/sec
(Всего получено кадров/сек)
Индикатор, показывающий возможность перегрузки мостов и маршрутизаторов. PERF_COUNTER _COUNTER

[В начало]

8.2.9. Network Interface (Сетевой интерфейс)

Используйте объект Network Interface для контроля сети на физическом уровне. Объекты сетевого интерфейса существуют у Transmission Control Protocol / Internet Protocol (TCP/IP) и контролирует работу IP протокола. Они позволяют отслеживать передачу данных через сетевые адаптеры. Не существует объектов, позволяющих контролировать передачу через сетевые платы по другим сетевым протоколам.

Объект \ счетчик Комментарий Тип
Network Interface\Packets Outbound Discarded
(Исходящих пакетов отброшено)
Количество исходящих пакетов, которые были отброшены, хотя и не было зафиксировано каких-либо ошибок, препятствующих их отправке. Одна из возможных причин отбрасывания таких пакетов - необходимость освободить место в буфере. Если значение этого счетчика непрерывно увеличивается, это может указывать на то, что сеть сильно загружена и буфер не успевает освободиться от исходящих пакетов. PERF_COUNTER _RAWCOUNT

[В начало]

9. Встроенные средства контроля производительности SQL Server

Наряду с упоминавшейся уже выше в этой статье системной таблицей sysperfinfo, существуют и другие средства мониторинга производительности работы компонент MS SQL Server. Упоминания о многих из них уже убраны из SQL Server Books Online, но, видимо, из соображений обратной совместимости, они продолжают присутствовать в поставляемом конечному пользователю дистрибутиве и по сей день.

[В начало]

9.1. Статистические системные функции

Следующие серверные функции позволяют DBA в реальном масштабе времени получать статистическую информацию о производительности MS SQL Server:

  1. @@cpu_busy - возвращает время в миллисекундах со времени последнего запуска сервера, которое процессор потратил на свою работу.

  2. @@io_busy - возвращает время в миллисекундах со времени последнего запуска сервера, которое SQL Server потратил на выполнение операций ввода - вывода.

  3. @@idle - возвращает время в миллисекундах со времени последнего запуска сервера, которое SQL Server простаивал.

  4. @@pack_sent - возвращает число отправленных в сеть SQL сервером пакетов, со времени последнего запуска сервера.

  5. @@pack_received - возвращает число полученных SQL сервером из сети пакетов, со времени последнего запуска сервера.

  6. @@packet_errors - возвращает число ошибок сетевых пакетов, которые произошли при подключении к серверу баз данных, со времени последнего запуска сервера.

  7. @@total_read - возвращает число операций дискового чтения, выполненных SQL сервером со времени последнего запуска.

  8. @@total_write - возвращает число операций записи на диск, выполненных SQL сервером со времени последнего запуска.

  9. @@total_errors - возвращает число ошибок операций чтения/записи с дисков, которые выполнял SQL сервер со времени последнего запуска сервера.

  10. @@connections - возвращает число подключений (или их попыток) к SQL Server, со времени последнего запуска сервера.

  11. fn_virtualfilestats - Возвращает статистику ввода-вывода для файлов базы данных, включая журналы транзакций.

[В начало]

9.2. Системная таблица spt_monitor и процедура sp_monitor

SQL Server использует представленные выше статистические функций в системной хранимой процедуре sp_monitor, которая отображает текущие значения, возвращённые этими функциями, и показывает насколько они изменились со времени последнего её исполнения. Для сравнения текущих и предшествующих значений используется системная таблица spt_monitor, которая вместе с процедурой базируется в базе данных master.
Вызывается она просто:


USE master
EXEC sp_monitor

Возвращает она четыре таблицы, которые имеют следующий вид:

last_run current_run Seconds
2003-09-11 13:36:04.677 2003-09-12 14:11:38.537 88534

cpu_busy io_busy idle
8458(2229)-2% 958(166)-0% 688914(169139)-191%

packets_received packets_sent packet_errors
2162601(519325) 2526801(597183) 0(0)

total_read total_write total_errors connections
67808(11979) 1025105(241354) 0(0) 142865(34499)

Статистическая информация по столбцам выводится в формате number(number)-number% или number(number). Первое число показывает количество секунд (для: cpu_busy, io_busy, и idle) или общее количество (для других переменных), с момента последнего перезапуска SQL Server. Число в круглых скобках показывает количество секунд или общее количество с последнего запуска процедуры sp_monitor. Последняя цифра показывает, какая доля в процентном отношении от полного времени или количества относится к последнему измерению со времени последнего запуска sp_monitor. Например, если cpu_busy показывает как 8458(2229)-2%, это означает, что: CPU были заняты 8458 секунд, со времени последнего запуска SQL Server; 2229 секунд он был занят со времени последнего запуска sp_monitor; и 2 процента от полного времени составляет интервал измерения от последнего запуска sp_monitor. В теле процедуры это вычисляется следующим образом:


cpu_busy = 
substring(
convert(varchar(11),  convert(int, ((@cpu_busy * @mspertick) / 1000))) 
+ '(' + 
convert(varchar(11), convert(int, (((@cpu_busy - cpu_busy)*@mspertick) / 1000))) 
+ ')' + '-' + 
convert(varchar(11), convert(int, ((((@cpu_busy - cpu_busy)*mspertick)/1000)*100)/@interval)) 
+ '%', 1, 25)

[В начало]

9.3. DBCC SQLPERF(...)

В ранних версиях SQL Server, до появления системной таблицы sysperfinfo, для получения статистической информации о производительности использовалась команда dbcc sqlperf(…). В MS SQL Server 2000 сохранились некоторые её возможности (в порядке поддержки обратной совместимости) но в документации описана только одна команда: dbcc sqlperf (logspace). В этой статье приводятся три команды, которые возможно было исполнить на MS SQL Server 2000 SP3a. Для правильного исполнения этих команд необходимо настроить параметры среды:


SET NOCOUNT ON
SET STATISTICS TIME ON
dbcc traceon(3604)

Команда dbcc sqlperf(lrustats) выдаёт подробности использования кэша. Ниже представлен пример вывода результатов её исполнения:

Statistic Value
Cache Hit Ratio 99.994118
Cache Flushes 0.0
Free Page Scan (Avg) 0.0
Free Page Scan (Max) 0.0
Min Free Buffers 331.0
Cache Size 4362.0
Free Buffers 922.0

Команда dbcc sqlperf(IOSTATS) выдаёт активность операций ввода-вывода. Вот пример результирующей таблички:

Statistic Value
Reads Outstanding 0.0
Writes Outstanding 0.0

Команда dbcc sqlperf (logspace) выдаёт статус, размер и утилизацию журналов транзакций имеющихся баз данных:

Database Name Log Size (MB) Log Space Used (MB) Status
master 3.3671875 31.540024 0
tempdb 0.7421875 58.421051 0
model 0.4921875 68.650795 0
msdb 1.2421875 45.715408 0
pubs 2.2421875 34.342335 0
Northwind 9.5546875 28.899223 0
distribution 0.9921875 55.216534 0

[В начало]

10. Восстановление счётчиков производительности

Счётчики производительности наиболее часто используются для контроля работы приложений, запускаемых в качестве службы (сервиса) Windows. Такие счётчики есть практически у всех сервисов, поставляемых с операционной системой или в комплекте поставки разнообразных серверов Microsoft. Одним из таких серверов является MS SQL Server.
Как правило, необходимый набор счётчиков представляет из себя отдельную компоненту, реализованную в виде DLL. Данные об устанавливаемых счётчиках сохраняются в реестре операционной системы. Доступ к счётчикам и их значениям осуществляется через стандартный интерфейс. На представленном ниже рисунке показана архитектура счётчиков производительности, реализованная в операционной системе Windows NT:

Начиная с Windows NT, стали поставляться локализованные версии операционных систем. С этим связана одна из проблем, возникающая на локализованных Windows NT и Windows 2000, которая проявляется в том, что счётчики производительности для какого-либо не локализованного сервера, устанавливаемого на локализованную ОС, не отображаются в Performance Monitor (System Monitor).

[В начало]

10.1. Проблемы локализации

Причиной не верного отображения счётчиков может быть отсутствие одного из разделов системного реестра, в котором хранятся локализованные описания счётчиков. Например, для русской локализации, ветка реестра:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\

должна иметь два контейнера для английской (009) и для русской (019) версий счётчиков:


HKEY_LOCAL_MACHINE
    \SOFTWARE
        \Microsoft
            \Windows NT
                \CurrentVersion
                    \Perflib
                         \009
                         \019

Если один из разделов отсутствует, можно с помощью входящей в комплект операционной системы утилиты regedt32 скопировать имеющийся контейнер (например, сохранив его в файл), а потом добавить его содержимое в новый контейнер в указанной выше ветке реестра.
Ниже представлен очень сокращённый пример содержимого контейнера 019, сохранённого в файл 019.reg


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\

должна иметь два контейнера для английской (009) и для русской (019) версий счётчиков:


Раздел:          SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\019
Название класса:        <Класс отсутствует>
Последнее время записи:   01.01.1601 - 3:00
Параметр 0
  Название:            Counter
  Тип:            REG_MULTI_SZ
  Значение:            1
                 1847
                 2
                 Система
                 4
                 Память
                 6
                 % загруженности процессора
           
 
Параметр 1
  Название:            Help
  Тип:            REG_MULTI_SZ
  Значение:            3
                 Объект 'Система' (System) содержит счетчики, которые относятся 
                 ко всем процессорам данного компьютера в целом. Эти счетчики 
                 отражают активность всех процессоров данного компьютера.
                 5
                 Объект 'Память' (Memory) содержит счетчики, которые описывают 
                 поведение как реальной, так и виртуальной памяти данного 
                 компьютера. Реальная память выделяется блоками фиксированного 
                 размера, которые называются страницами. Виртуальная память может 
                 превосходить реальную по размерам, что вызывает выполнение 
                 страничного обмена (или подкачки) - процесса, в результате которого 
                 виртуальные страницы памяти перемещаются с диска в реальную 
                 оперативную память.
                 7
                 Загруженность процессора (Processor Time) - это процентное 
                 отношение времени, которое процессор был занят выполнением 
                 операций для не простаивающих потоков (non-Idle thread). Эту 
                 величину можно рассматривать как долю времени, приходящегося на 
                 выполнение полезной работы. Каждый процессор может быть назначен 
                 простаивающему потоку, который потребляет непродуктивные циклы 
                 процессора, не используемые другими потоками.

Обратите внимание на то, что в этом файле существуют два раздела, относящиеся к ключам системного реестра Counter и Help. Запись о каждом счётчике производительности в разделе Counter содержит чётный идентификатор счётчика и его название. В разделе Help хранится краткое описание назначения счётчика, которое имеет нечётный идентификатор, равный идентификатору соответствующего счётчика увеличенному на единицу. Такая организация идентификации счётчиков легко видна в представленном выше примере значений ключа реестра:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\019

Посмотрите на счётчик с идентификатором 2 - "Система", у которого описание имеет идентификатор 3 и содержит текст: "Объект 'Система' (System) содержит счетчики, которые…".

[В начало]

10.2. Ошибки в реестре

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


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

Это ключи: Last Counter и Last Help. По-видимому, значения этих ключей иногда понимается буквально, исходя из их названия. Увы, это не так. В этих ключах системного реестра хранятся не последние идентификаторы, а значения, которые должны быть больше самых больших значений идентификаторов счётчиков и их описаний соответственно. Таким образом, для русской локализации, в ключе:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\ Last Counter

Должно быть чётное значение, большее самого большого значения идентификатора счётчиков в ключах:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009\Counter

и


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\019\Counter

А для ключа:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\ Last Help

Необходимо не чётное значение, которое больше максимальных значений в ключах:


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009\ Help

и


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\019\ Help

Если Вы обнаружили, что значения Last Counter и Last Help меньше или равны значениям максимальных идентификаторов Counter и Help, можете исправить это с помощью утилиты regedt32.

[В начало]

10.3. Дефектные DLL

Третьей причиной, из-за которой могут возникать проблемы со счётчиками производительности, это расширения для счётчиков производительности, оформленные в виде DLL, которые поставляются третьими фирмами. Ошибки в таких DLL могу приводить к проблемам в работе не только со счётчиками, которые устанавливаются для сервисов этих фирм, но и для других счётчиков. Что бы решать такие проблемы, необходимо найти и отключить дефектную DLL. Делается это простым, но хлопотным способом. Все относящиеся к счётчикам производительности DLL должны быть описаны вместе с обслуживаемыми ими сервисами, т.е. в ветке реестра:


HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

Вы должны последовательно пройти по всем веткам реестра, в которых описаны обслуживающие счётчики производительности сервисов DLL, и переименовывать файлы этих DLL.
Такие DLL должны быть описаны в ключах системного реестра, шаблон которого будет иметь подобный вид:


HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\service name\Performance

Для удобства, можно воспользоваться утилитой regedit и выполнять поиск по ключевому слову Performance. После каждого переименования, необходимо перезагружать операционную систему и проверять, исчезла ли проблема со счётчиками. Например, можно переименовывать таким образом: OrigLib.DLL заменяем на хxOrigLib.DLL.
После нахождения дефектной DLL, все остальные, переименованные DLL нужно переименовать в их прежние имена.

[В начало]

10.4. Недостаток прав пользователя

Четвёртой проблемой счётчиков производительности является отсутствие у пользователя, в профиле которого выполняются операции со счётчиками (например, измерения счётчиков в системном мониторе или установка ПО, использующего счётчики производительности), прав на ветки реестра, в которых хранятся данные о счётчиках. Все эти ветки реестра были перечислены выше в статье и, если это не противоречит требованиям Вашей информационной безопасности, Вы можете с помощью утилиты regedt32 дать учётной записи этого пользователя необходимый набор прав для работы со счётчиками или для их установки.

[В начало]

10.5. Переустановка счётчиков

После того, как Вы локализовали проблему со счётчиками, Вам, возможно, понадобится их переустановить. В случае MS SQL Server 2000 Вы можете удалить и повторно установить только компоненту счётчиков, воспользовавшись программой установки.
Есть и альтернативные варианты. В форуме на SQL.RU проблема восстановления счётчиков всплывала неоднократно и вот три рецепта, которые мне особенно запомнились:

Первый рецепт, автор: KanDid


Вот мои простейшие действия: 

1. Проверить правильность ссылок в реестре 
Hkey_Local_Machine\SoftWare\Microsoft\WindowsNT\CurrentVersion\PerfLib\009\Counter 
Hkey_Local_Machine\System\CurrentControlSet\Services\MSSQLServer\Performance\Library 
2. Грохаю Per?019.dat в system32 

Вот полезные ссылки: 

MS KB: SQL Performance Monitor Counters Missing (Q227662) 


BUG: SQL Server Perf. Counters Don't Work on WinNT Server 4.0 (Q170394) 


How can I rebuild performance counter library information?


FIX: "Performance monitor shared memory setup failed: -1" error message when you start SQL Server

Второй рецепт, автор: Дед Маздай

Фигня какая-то творится на Корусане, как говаривал магистр Йода. Интересно, что пишет select * from master..sysperfinfo?
Скорее всего, ничего. Ладно, если Ваш SQL Server не хочет по-хорошему, поступим так:

0.Backup всему ценному.
1.Разрегистрируйте sqlctr80.dll и переименуйте ее в .old.
2. Грохаю Perf?019.dat в system32
2a.Скопируйте и зарегистрируйте sqlctr80.dll из дистрибутива.
3.Перестартните SQL Server.
4.Откройте командное окно и зайдите в binn.
5.Скажите unlodctr MSSQLServer.
6.Скажите lodctr MSSQLServer.
7.Перезагрузите тачку.
8.Если не полегчало, скопируйте perf?009.dat c дистрибутива Windows в system32 и перезагрузитесь еще раз.
9.Скажите regrebld.exe.
10.Запустите procsyst.sql из \install.
Если не спасет, не знаю, остается только переустановка.

Кроме входящих в состав Windows утилит unlodctr и lodctr для операционных систем Windows XP и Windows 2003 появилась новая утилита, позволяющая переустанавливать счётчики производительности - это утилита командной строки wmiadap которую запускают с ключом /f.

Тпретий рецепт, автор: Владимир Белов

Ещё один совет по разрешению проблем со счётчиками производительности, который прозвучал от Владимира Белова в форуме Microsoft SQL Server сайта SQL.RU.
Владимир пишет, что данная проблема возникает, когда пользователь делает завершение сеанса своей работы, перезагрузку или завершение работы сервера баз данных при запущенном Performance Monitor. Тогда при следующем заходе на сервер счетчики SQL Server не будут видны. Владимир считает, что это баг SP3, и "лечится" он запуском Performance Monitor и завершением его работы. После этого необходимо перезагрузить сервер. После перезагрузки все должно работать.
Подобную проблему с невозможностью получения доступа к счётчикам SQL Server в рамках терминальной сессии наблюдал и автор статьи, если работа со счётчиками одновременно велась в другой сессии (например, в ней был запущен Performance Monitor, который выполнял трассировку счётчиков SQL Server). Получить доступ к счётчикам в этом случае можно завершив работу Performance Monitor в параллельной сессии, и после закрытия текущей, собственной сессии, открыть новую, в которой счётчики должны стать доступны. В крайнем случае, если сессию закрыть невозможно (например, это консольная сессия), можно перегрузить сервер.

ПРЕДОСТЕРЕЖЕНИЕ: Предлагаемые в этой статье операции с изменением значений ключей системного реестра, при неверном или ошибочном их исполнении, могут привести к отказам в работе установленного программного обеспечения или даже к краху системы. Если Вы решите воспользоваться любым из описанных выше способов восстановления ключей системного реестра, убедитесь, что Вы располагаете резервными копиями всей ценной информации, хранимой на компьютере и копиями системной информации (включая реестр). Необходимо выполнить все рекомендации поставщиков операционной системы и установленного на компьютере программного обеспечения по резервированию и восстановлению работоспособности системы и программ.

Примечание: Существует специальная утилита Майкрософт, которая позволяет отключать счётчики производительности: Windows 2000 Resource Kit Tool : Extensible Performance Counter List (exctrlst.exe).

[В начало]

11. Заключение

В рамках статьи практически невозможно осветить все связанные со счётчиками производительности темы и проблемы. Здесь мы смогли рассмотреть только пороговые значения для наиболее интересных, с точки зрения мониторинга производительности MS SQL Server, счётчиков. Также, были даны рекомендации по выбору счётчиков для более детального анализа выявленных узких мест в работе программно-аппаратного комплекса. За рамками нашего рассмотрения остались вопросы и рекомендации по анализу конкретных проблем производительности компонент системы, сервера и аппаратных средств. Кроме того, для администраторов баз данных могут представлять интерес методики накопления хронологических данных по значениям ключевых счётчиков, а также их анализ и представление, для обеспечения возможности прогнозирования поведения информационной системы. Поскольку весь спектр применимости счётчиков производительности невозможно охватить усилиями одного человека, позвольте пригласить вас уважаемы читатели к сотрудничеству в рамках обозначенной этой статьёй темы. Я приглашаю вас стать авторами собственных статей или переводов, что бы наши совместные усилия смогли пролить больше света на это весьма "запутанное" дело :) Кроме рекомендаций по разрешению конкретных проблем производительности, в качестве темы самостоятельного исследования для подготовки статьи, предлагаю желающим найти не сложный и не ресурсоёмкий способ получения текущих значений счётчиков производительности не относящихся к MS SQL Server, для которого такие значения уже и так можно получить обычным селектом из таблицы sysperfinfo.

[В начало]

Автор: Александр Гладченко  2003г.

Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013