Автор: Александр
Гладченко
Настоящая статья исследует возможности анализа счётчиков
производительности Windows 2000, под управлением которой
работает SQL Server 2000. Даются пороговые значения ключевых
счётчиков, рекомендации по наборам счётчиков для поиска узких
мест различных компонент системы в целом и приводятся методики
поиска и устранения выявленных с помощью счётчиков
проблем. При написании статьи использовались материалы
технической библиотеки на сайте Microsoft, а также
поставляемые с указанным выше программным обеспечением
справочные, электронные документы и документация, поставляемая
с Microsoft® Windows® 2000 Server Resource Kit Server
Operations Guide.
1. Введение 2.
Анализ
узких мест 3. Счётчики 4.
Типы
счётчиков 5. Память 5.1.
Поиск
узких мест использования памяти Windows
2000 5.2. Наборы
счётчиков мониторинга памяти 5.3. Системная
таблица sysperfinfo 5.4. Диагностика
всплесков отложенной
записи 6. Процессор 6.1.
Поиск
узких мест использования процессора Windows
2000 6.2. Набор
счётчиков мониторинга
процессоров 7. Дисковая
подсистема 7.1. Поиск
узких мест использования дисковой подсистемы сервера Windows
2000 7.2. Набор
счётчиков мониторинга дисковой
подсистемы 8. Сеть 8.1.
Поиск
узких мест сети 8.2. Набор
счётчиков мониторинга сети 8.2.1. Browser
(Обозреватель сети) 8.2.2. Server 8.2.3.
Redirector
(Перенаправитель) 8.2.4. Server
Work Queues (Рабочая очередь сервера) 8.2.5. Transmission
Control Protocol 8.2.6. NetBEUI 8.2.7.
User
Data Protocol 8.2.8. Network
Segment (Сегмент сети) 8.2.9. Network
Interface (Сетевой
интерфейс) 9. Встроенные
средства контроля производительности SQL
Server 9.1. Статистические
системные функции 9.2. Системная
таблица spt_monitor и процедура
sp_monitor 9.2. DBCC
SQLPERF(...) 10. Восстановление
счётчиков производительности 10.1. Проблемы
локализации 10.2. Ошибки
в реестре 10.3. Дефектные
DLL 10.4. Недостаток
прав пользователя 10.5. Переустановка
счётчиков 11. Заключение
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. При описании счётчиков используются следующие
обозначения:
Мы не будем описывать все существующие типы счётчиков, а
ограничимся только теми, которые нам встретятся по тексту
настоящей статьи. Вот они:
Базовый тип |
Описание |
Корреспондируемые типы |
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 имеется
средство, позволяющее управлять прерываниями таким способом.
[В
начало]
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
Второй рецепт, автор: Дед Маздай
Фигня какая-то творится на Корусане, как говаривал
магистр Йода. Интересно, что пишет 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 в
параллельной сессии, и после закрытия текущей, собственной
сессии, открыть новую, в которой счётчики должны стать
доступны. В крайнем случае, если сессию закрыть невозможно
(например, это консольная сессия), можно перегрузить
сервер.
:
Предлагаемые в этой статье операции с изменением значений
ключей системного реестра, при неверном или ошибочном их
исполнении, могут привести к отказам в работе установленного
программного обеспечения или даже к краху системы. Если Вы
решите воспользоваться любым из описанных выше способов
восстановления ключей системного реестра, убедитесь, что Вы
располагаете резервными копиями всей ценной информации,
хранимой на компьютере и копиями системной информации (включая
реестр). Необходимо выполнить все рекомендации поставщиков
операционной системы и установленного на компьютере
программного обеспечения по резервированию и восстановлению
работоспособности системы и программ.
[В
начало]
11.
Заключение
В рамках статьи практически невозможно осветить все
связанные со счётчиками производительности темы и проблемы.
Здесь мы смогли рассмотреть только пороговые значения для
наиболее интересных, с точки зрения мониторинга
производительности MS SQL Server, счётчиков. Также, были даны
рекомендации по выбору счётчиков для более детального анализа
выявленных узких мест в работе программно-аппаратного
комплекса. За рамками нашего рассмотрения остались вопросы и
рекомендации по анализу конкретных проблем производительности
компонент системы, сервера и аппаратных средств. Кроме того,
для администраторов баз данных могут представлять интерес
методики накопления хронологических данных по значениям
ключевых счётчиков, а также их анализ и представление, для
обеспечения возможности прогнозирования поведения
информационной системы. Поскольку весь спектр применимости
счётчиков производительности невозможно охватить усилиями
одного человека, позвольте пригласить вас уважаемы читатели к
сотрудничеству в рамках обозначенной этой статьёй темы. Я
приглашаю вас стать авторами собственных статей или переводов,
что бы наши совместные усилия смогли пролить больше света на
это весьма "запутанное" дело :) Кроме рекомендаций по
разрешению конкретных проблем производительности, в качестве
темы самостоятельного исследования для подготовки статьи,
предлагаю желающим найти не сложный и не ресурсоёмкий способ
получения текущих значений счётчиков производительности не
относящихся к MS SQL Server, для которого такие значения уже и
так можно получить обычным селектом из таблицы
sysperfinfo.
[В
начало]
|