Опубликован: 11.12.2006 | Уровень: специалист | Доступ: платный

Лекция 36: Разрешение наиболее распространенных проблем производительности

Хранимая процедура sp_who

Вы можете также просматривать информацию об активных процессах, запустив следующую команду в Query Analyzer или с помощью OSQL:

sp_who active
GO

Результаты выполнения этой команды в Query Analyzer показаны на рис. 36.14. Если какой-либо процесс блокирован, то в колонке "blk" показан SPID-номер процесса, который его блокирует.

Пример результатов запуска sp_who active

увеличить изображение
Рис. 36.14. Пример результатов запуска sp_who active

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

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

Дополнительная информация. Для получения более подробной информации по просмотру информации о блокировках найдите "displayinglocks" в Books Online и выберите "Displaying Locking Information" (Отображение информации о блокировках) в диалоговом окне Topics Found.

Наиболее характерные узкие места, снижающие производительность

Теперь, узнав, как использовать средства мониторинга производительности, такие как System Monitor, Enterprise Manager, Query Analyzer и Profiler, вы готовы к тому, чтобы справляться с проблемами узких мест, снижающих производительность. В этом разделе мы рассмотрим некоторые из наиболее характерных узких мест, снижающих производительность, и различные решения этих проблем. Многие из этих узких мест тесно связаны друг с другом, и одно узкое место может "маскироваться" под другое. Вы должны искать как аппаратные, так и программные узкие места, поскольку причиной многих проблем производительности являются комбинации узких мест. Причиной аппаратных узких мест могут становиться такие компоненты оборудования, как ЦП, память и подсистема ввода-вывода; причиной программных узких мест могут становиться приложения SQL Server и операторы SQL. Мы рассмотрим подробнее каждый из этих типов проблем в следующих разделах.

Центральный процессор (ЦП)

Одной из наиболее распространенных проблем производительности является просто недостаток мощности. Процессорная мощность системы определяется количеством, типом и скоростью центральных процессоров (ЦП) в этой системе. Если вашей системе недостает мощности ЦП, то она не может достаточно быстро обрабатывать транзакции, как это требуется пользователям. Чтобы использовать System Monitor для определения процента использования ЦП, проверяйте счетчик %Processor Time объекта Processor. (Выберите все экземпляры ЦП, если у вас многопроцессорная система.) Если ваши ЦП работают с загрузкой 75% или выше в течение длительных периодов времени (75 % – желательный максимум согласно правилам "Планирование мощности системы" ), то в вашей системе, скорее всего, имеется проблема узкого места, связанного с ЦП. Если вы постоянно видите процент использования ЦП не ниже 60 %, то вам, видимо, поможет добавление более быстрых ЦП или увеличение количества ЦП.

Выполните мониторинг других характеристик системы, прежде чем увеличивать мощность ЦП. Например, если ваши операторы SQL сформированы неэффективно, то ваша система, видимо, выполняет намного больше операций обработки, чем это требуется, и оптимизация этих операторов, возможно, снизит степень использования ЦП. Или, предположим, что коэффициент попадания в кэш-память (счетчик Cache hit ratio) для кэша данных SQL Server ниже 90 %. Возможно, вы должны добавить память для кэша данных (увеличив значение параметра max server memory или добавив физическую память к системе). Это позволит увеличить количество данных, помещаемых в кэш, и, тем самым, снизить объем дисковых физических операций ввода-вывода, что приведет к снижению процента использования ЦП, поскольку на обработку запросов ввода-вывода будет уходить меньше времени. Вы можете иногда повышать производительность системы, просто за счет добавления процессоров, особенно в том случае, если вы начинаете работу с однопроцессорной системы. Однако не все приложения допускают масштабирование на многопроцессорные системы. SQL Server предусматривает масштабирование, но не все операторы SQL, которые могут у вас использоваться, допускают масштабирование. На одном ЦП будет одновременно выполняться только один процесс, и одного ЦП достаточно для одного оператора SQL Server. Чтобы повысить производительность за счет использования нескольких процессоров, ваша система SQL Server должна параллельно выполнять несколько операторов, которые могут одновременно обрабатываться на различных ЦП.

Обычно вы можете почти всегда повысить производительность за счет использования большего количества более быстрых ЦП. Однако в некоторых случаях при добавлении более быстрых ЦП вы должны увеличить память и мощность ввода-вывода, чтобы другие компоненты не стали причиной узкого места. Например, если у вас сначала была проблема узкого места из-за ЦП и вы разрешили эту проблему, добавив еще один ЦП, то ваша система, видимо, сможет выполнять больше работы, что приведет к увеличению количества дисковых операций ввода-вывода. В результате может возникнуть проблема узкого места из-за дисковой подсистемы ввода-вывода. Кроме того, убедитесь, что новые процессоры, которые вы хотите добавить, имеют кэш уровня 2 (Level 2 [L2]). Чем больше кэш ЦП, тем выше производительность, особенно в многопроцессорной системе.

Если вы действительно решили увеличить процессорную мощность, то можете добавить новые ЦП или заменить существующие ЦП на более мощные. Например, если в вашей системе два ЦП, но ее можно расширить до четырех ЦП, добавьте еще два ЦП того же типа или установите четыре новых, более быстрых ЦП. Если ваша система уже содержит максимальное количество ЦП и вам нужно увеличить процессорную мощность, постарайтесь получить более быстрые ЦП для их замены. Например, предположим, что у вас четыре ЦП, работающих со скоростью 200 МГц. Вы можете заменить их четырьмя ЦП со скоростью 500 МГц. Более быстрые ЦП способствуют сокращению времени обработки.

Максим Ерохин
Максим Ерохин
Россия, г. Санкт-Петербург
Татьяна Лубинец
Татьяна Лубинец
Россия, Уфа, Уфимский авиационный институт, 1987