На протяжении всего этого курса вы узнавали о средствах, которые можете использовать, и параметрах, которые можете регулировать для поиска и разрешения определенных проблем производительности. Например, в предыдущей лекции вы узнали, как выявлять проблемы, связанные с вашими операторами T-SQL и хранимыми процедурами, и как настраивать эти операторы и процедуры для получения оптимальной производительности. Назначение этой лекции – помочь вам легко находить информацию, необходимую для разрешения различных типов проблем производительности. В ней дается обзор связанных с производительностью тем, которые были изложены в других лекциях, даются ссылки на предыдущие лекции, где рассматриваются процедуры производительности, и приводится некоторая дополнительная информация о мониторинге производительности и настройке системы
Мы начнем с краткого описания термина "узкое место". Затем мы рассмотрим, как использовать Microsoft Windows 2000
К концу этой лекции вы будете готовы к выявлению узких мест, снижающих производительность, и определению их причин. Вы не всегда сможете разрешить проблемы производительности, но большинство из них поддаются разрешению, если у вас есть для этого время и ресурсы.
Термин "узкое место" (
Почти любой компонент, действующий в системе, может потенциально стать причиной узкого места. Узкое место может быть вызвано одним компонентом, таким как отдельный диск, набором компонентов, таким как
Чтобы определить наличие проблем в вашей системе, вам нужно сначала выполнить некоторые общие исследования по производительности системы. Например, определите, не сталкиваются ли пользователи с проблемой медленного отклика (время отклика больше ожидаемого), когда они выполняют запросы и модификации базы данных. Это характерный симптом проблемы производительности или узкого места. Например, вы можете обратить внимание, что при выполнении определенного запроса все другие операции, запущенные в данной системе, выполняются медленнее, чем обычно. Поэтому вы постараетесь оптимизировать этот запрос или выполнять его, когда меньшее число пользователей выполняет доступ к системе.
Еще одним способом выявления проблемы является периодическое тестирование и мониторинг системы. Для этого вы можете использовать разнообразные средства, включая Windows 2000 sp_who которую можете использовать для мониторинга
В состав Windows 2000
Чтобы использовать
(рис 36.2) Окно Windows 2000 Performance(рис 36.1) Диалоговое окно Add Counters (Добавление счетчиков)Для сохранения данных производительности в файле журнала выполните следующие шаги:
Для проверки состояния вашей системы вам следует регулярно использовать
(рис 36.6) Окно System Monitor, где показана запись для нового журнала счетчиков
Кроме использования Enterprise Manager для автоматизации повседневных административных функций вы можете использовать его как средство, помогающее в мониторинге процессов и блокировок SQL Server. (О блокировках см. лекцию 19.) Например, вы можете собирать данные о том, какие процессы используют блокировки и какие объекты блокируются (объект в данном случае – это таблица, база данных или временная таблица). Для просмотра этой информации выполните следующие шаги.
(рис 36.8) Раскрытая папка Current Activity (Текущие операции) в окне Enterprise Manager(рис 36.7) Информация папки Process Info (Информация о процессах) в окне Enterprise Manager
(рис 36.10) SPID-номера, показанные в панели Locks / Process ID(рис 36.9) Диалоговое окно Process Details Вы можете также просматривать информацию об
sp_who active GO
Результаты выполнения этой команды в Query Analyzer показаны на рис. 36.14. Если какой-либо процесс блокирован, то в колонке "blk" показан
(рис 36.14) Пример результатов запуска sp_who activeЕсли пользователи жалуются, что их транзакции выполняются медленно, вы можете запустить эту команду для поиска блокировок. Вы будете много раз сталкиваться с ситуацией, когда большинство
Вам следует время от времени выполнять мониторинг блокировок, чтобы выявлять процессы, которые удерживают блокировку слишком долго, и процессы, которые бывают блокированы слишком часто (находятся в состоянии WAIT ) из-за монопольных блокировок или блокировок по таблицам, которые удерживаются другими процессами. Но обычно в случае проблемы блокировки ваши пользователи будут жаловаться на слишком большое время отклика. Если блокирование возникает слишком часто или длится слишком долго, то вам потребуется определить, какие процессы удерживают
Теперь, узнав, как использовать средства мониторинга производительности, такие как
Одной из наиболее распространенных проблем производительности является просто недостаток мощности. Процессорная мощность системы определяется количеством, типом и скоростью центральных процессоров (ЦП) в этой системе. Если вашей системе недостает мощности ЦП, то она не может достаточно быстро обрабатывать транзакции, как это требуется пользователям. Чтобы использовать
Выполните мониторинг других характеристик системы, прежде чем увеличивать мощность ЦП. Например, если ваши операторы SQL сформированы неэффективно, то ваша система, видимо, выполняет намного больше операций обработки, чем это требуется, и оптимизация этих операторов, возможно, снизит степень использования ЦП. Или, предположим, что коэффициент попадания в кэш-память (счетчик
Обычно вы можете почти всегда повысить производительность за счет использования большего количества более быстрых ЦП. Однако в некоторых случаях при добавлении более быстрых ЦП вы должны увеличить память и мощность ввода-вывода, чтобы другие компоненты не стали причиной узкого места. Например, если у вас сначала была проблема узкого места из-за ЦП и вы разрешили эту проблему, добавив еще один ЦП, то ваша система, видимо, сможет выполнять больше работы, что приведет к увеличению количества дисковых операций ввода-вывода. В результате может возникнуть проблема узкого места из-за дисковой
Если вы действительно решили увеличить процессорную мощность, то можете добавить новые ЦП или заменить существующие ЦП на более мощные. Например, если в вашей системе два ЦП, но ее можно расширить до четырех ЦП, добавьте еще два ЦП того же типа или установите четыре новых, более быстрых ЦП. Если ваша система уже содержит максимальное количество ЦП и вам нужно увеличить процессорную мощность, постарайтесь получить более быстрые ЦП для их замены. Например, предположим, что у вас четыре ЦП, работающих со скоростью 200 МГц. Вы можете заменить их четырьмя ЦП со скоростью 500 МГц. Более быстрые ЦП способствуют сокращению времени обработки.
Количество памяти, доступной SQL Server, является одним из наиболее критичных факторов для производительности SQL Server. Важным фактором является также соотношение между памятью и мощностью
В некоторых случаях недостаточное количество памяти может приводить к узкому месту за счет диска из-за увеличения количества дисковых физических операций ввода-вывода, связанного с тем, что система не может эффективно использовать кэш. Чтобы увидеть, сколько системной памяти использует SQL Server, запустите
Чтобы определить, хватает ли кэш-памяти для SQL Server, используйте
Узкие места, возникающие в
Проблема подсистем ввода-вывода возникает вследствие ограниченности количества операций, которые можно выполнять на диске; например, определенный дисковод может выполнять не более 85 операций ввода-вывода с произвольным доступом в секунду. При слишком большой нагрузке на диски операции ввода-вывода на этих дисках поступают в очередь, что приводит к большим задержкам ввода-вывода для SQL Server. Эти большие задержки могут приводить к более длительному удерживанию блокировок или к простаиванию потоков, ожидающих освобождения какого-либо ресурса. В конечном итоге снижается производительность системы в целом, что, в свою очередь, раздражает пользователей, которые жалуются, что их транзакции выполняются слишком долго.
В большинстве случаев проблемы производительности подсистем ввода-вывода возникают потому, что был неправильно спланирован состав соответствующей
Планирование состава (sizing)
Чтобы определить, не перегружены ли ваши диски, выполняйте мониторинг счетчиков объектов PhysicalDisk и LogicalDisk в DISKPERF.
Чтобы определить, активизирован ли оператор DISKPERF, запустите следующий оператор в командной строке:
diskperf
Если DISKPERF активизирован, то появится следующее сообщение: "Physical Disk Performance counters on this system are currently set to start at boot" (Счетчики производительности физических дисков в этой системе в настоящее время установлены для запуска при загрузке системы). Если DISKPERF отключен, то появится следующее сообщение: "Both Logical and Physical Disk Performance counters on this system are now set to never start" (Оба счетчика производительности [для логического и физического диска] не будут запускаться).
Чтобы активизировать оператор DISKPERF, если он отключен, введите следующий оператор в командной строке:
diskperf -Y
Чтобы отключить DISKPERF, запустите следующий оператор:
diskperf -N
Чтобы начали действовать изменения, внесенные DISKPERF, вы должны перезагрузить компьютер. Чтобы увидеть другие параметры для DISKPERF, введите следующий оператор:
diskperf ?
Особенно важны счетчики Disk Writes/Sec (Число операций записи/сек), Disk Reads/Sec (Число операций чтения/сек), Avg. Disk Queue Length (Avg. Disk Sec/Write (Среднее время одной операции записи) и Avg. Disk Sec/Read. (Среднее время одной операции чтения). Эти счетчики помогают вам определить, не перегружена ли ваша дисковая подсистема. Эти счетчики включены в оба объекта – PhysicalDisk и LogicalDisk. Чтобы получить подробное описание информации, которую предоставляют эти счетчики, щелкните на кнопке
Рассмотрим пример использования этих счетчиков. Предположим, вы считаете, что у вас имеется проблема узкого места Avg. Disk Sec/Transfer (Средняя длительность одной передачи на диске), Avg. Disk Sec/Read и Avg. Disk Sec/Write объекта PhysicalDisk, поскольку они отражают задержку (ожидание) на диске (время, которое требуется диску для выполнения операции чтения или записи), а повышение длительности задержки является признаком того, что у вас перегружены дисководы или дисковая матрица. Общее правило состоит в том, что нормальные показания этих счетчиков должны составлять от 1 до 15 миллисекунд (от 0,001 до 0,015 секунды), но вам не следует беспокоиться, если в периоды пиковой нагрузки задержка составит 20 миллисекунд (0,020 секунды). Но если значения более 20 миллисекунд, то в вашей системе явно имеется проблема производительности, связанная с подсистемой ввода-вывода.
Вы должны также проверять счетчики Disk Writes/Sec и Disk Reads/Sec. Предположим, эти счетчики показывают, что на диске выполняется 20 операций записи и 20 операций чтения в секунду, то есть всего 40 операций ввода-вывода в секунду, а мощность диска составляет 85 операций ввода-вывода в секунду. И если в то же самое время диск дает большие задержки, то, возможно, это говорит о неисправности данного диска. А теперь предположим, что на этом диске выполняется 100 операций в секунду и длительность задержек составляет 20 миллисекунд или больше. В этом случае вам требуется увеличить количество дисков, чтобы повысить производительность.
Чтобы определить, сколько операций ввода-вывода выполняет ваша система, когда вы используете RAID-матрицу, разделите количество операций ввода-вывода в секунду, которое вы видите в
| Уровень RAID | Чтение | Запись |
|---|---|---|
| 0 | 1 | 1 |
| 1 или 10 | 1 | 2 |
| 5 | 1 | 4 |
Обычно наилучшим способом устранения узкого места
Время от времени в вашей системе могут возникать проблемы из-за неисправных компонентов. Если компонент не отказал полностью, но постепенно ухудшает свою работу, то такую проблему бывает трудно обнаружить. Поскольку эти проблемы принимают различные формы и сложны для разрешения, в данном курсе не предусмотрено их подробное изложение. Вместо этого мы рассмотрим лишь несколько основных рекомендаций для выявления проблем неисправных компонентов.
Еще одним компонентом системы, который обычно вызывает проблемы производительности, являются приложения SQL Server. Причиной этих проблем может быть код самого приложения или операторы SQL, которые запускаются из этого приложения. В этом разделе даются советы и рекомендации разрешения проблем производительности, относящихся к приложениям SQL.
Вы видели в лекции 35, насколько важно выбрать наилучший
Правильное использование индексов является критически важным для получения высокой производительности (см лекции 17 и 35). Для поиска нужных данных с помощью индекса может потребоваться всего лишь 10–20 операций ввода-вывода, в то время как для поиска нужных данных путем сканирования таблиц могут потребоваться тысячи или миллионы операций ввода-вывода. Однако индексы следует использовать с осторожностью. Напомним, что при модифицировании данных таблицы с помощью оператора INSERT, UPDATE или DELETE происходит автоматическое обновление индекса или индексов, связанных с этими данными, что требует выполнения соответствующих операций ввода-вывода в дополнение к операциям непосредственного модифицирования таблицы. Следите за тем, чтобы не создавать слишком много индексов; иначе дополнительная нагрузка, связанная с поддержкой этих индексов, будет приводить к снижению производительности.
Хранимые процедуры используются для выполнения пакета заранее откомпилированных операторов SQL на сервере (см.лекцию 21). Вызов хранимых процедур из ваших приложений вместо вызова отдельных операторов SQL способствует повышению производительности как за счет повторяемого использования операторов SQL на сервере, так и за счет сильного снижения сетевого трафика. Снижение количества данных, передаваемых между клиентами и серверами, происходит за счет того, что хранимая процедура находится на сервере, а вы можете программировать обработку и фильтрацию данных в хранимой процедуре, а не в приложении.
SQL Server 2000 является практически самонастраиваемой системой, но вы все же можете изменять способ работу вашей системы, модифицируя значения определенных параметров конфигурирования. В этом разделе вы узнаете, как конфигурировать эти параметры и как они влияют на работу вашей системы. Скорее всего, вам не потребуется изменять эти параметры, но знание их возможностей позволяет вам решать, нужно ли вам их изменение. Вы можете конфигурировать эти параметры с помощью Enterprise Manager или с помощью хранимой процедуры T-SQL sp_configure.
Чтобы использовать Enterprise Manager, щелкните правой кнопкой мыши на имени сервера, который вы хотите конфигурировать, и выберите из контекстного меню пункт Properties (Свойства), чтобы появилось окно SQL Server Properties. Это окно содержит девять вкладок, и каждая вкладка содержит параметры, которые вы можете конфигурировать. Эти вкладки и соответствующие параметры описаны в следующих разделах.
Используя sp_configure для конфигурирования этих параметров, вы должны помнить, что определенные параметры считаются дополнительными (advanced options). (В следующих разделах указывается, какие параметры являются дополнительными.) Для изменения какого-либо дополнительного параметра с помощью sp_configure вы должны задать для параметра show advanced options (показать дополнительные параметры) значение 1 (активизировать). Для этого параметра по умолчанию задано значение 0 (деактивизировать). (Этот параметр не оказывает влияния на дополнительные параметры, если вы используете Enterprise Manager.) Чтобы активизировать параметр show advanced options, используйте следующий оператор:
sp_configure "show advanced options", 1 GO
Обычно для установки любого параметра с помощью sp_configure используется следующий синтаксис:
sp_configure "имя параметра", значение
Параметр (маска "родственности") используется, чтобы указывать, на каких ЦП могут выполняться потоки SQL Server в многопроцессорной среде. Значение 0 (принятое по умолчанию) указывает, что родственность потоков определяется алгоритмами планировщика Windows 2000. Ненулевое значение задает битовую маску, определяющую ЦП, на которых могут выполняться потоки SQL Server. Десятичное значение 1 (или двоичное значение маски 00000001) указывает, что может использоваться только ЦП 1; значение 2 (или 00000010) указывает использование только ЦП 2; 3 (или 00000011) указывает использование ЦП 1 и ЦП 2, и т.д.
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать для параметра show advanced options значение 1. Вы можете также конфигурировать параметр с помощью Enterprise Manager. Для этого щелкните на вкладке Processor (Процессор) в окне SQL Server Properties и в секции Processor Control (Управление процессорами) установите флажки перед каждым ЦП (CPU), который хотите использовать для SQL Server. Щелкните на кнопке Apply (Применить) и затем щелкните на кнопке OK, чтобы сохранить данное изменение. Чтобы это изменение начало действовать, вы должны закрыть и перезапустить SQL Server.
В системе, выделенной только для SQL Server, вы должны задать такое значение параметра , чтобы использовать для SQL Server все ЦП. В системе, которая не полностью выделена для SQL Server (то есть содержит другие процессы, которым требуется время ЦП) вам, возможно, потребуется задать такую маску, чтобы для SQL Server использовались все ЦП, кроме одного.
Параметр lightweight pooling (упрощенная организация пула) используется чтобы сконфигурировать SQL Server для использования упрощенных потоков (или "волокон" – fibers). Использование "волокон" может снизить количество lightweight pooling значение 1, которое активизирует упрощенную организацию пула, и затем снова выполнить мониторинг количества
Параметр lightweight pooling относится к группе дополнительных параметров, поэтому его можно конфигурировать с помощью sp_configure, если для параметра show advanced options задано значение 1. Вы можете также конфигурировать lightweight pooling с помощью Enterprise Manager. Щелкните на вкладке Processor в окне SQL Server Properties и в секции Processor Control установите флажок Use Windows NT Fibers (Использовать "волокна" Windows NT) для его активизации или сбросьте этот флажок для деактивизации параметра. Щелкните на кнопке Apply, щелкните на кнопке OK и затем закройте и перезапустите SQL Server, чтобы этот параметр начал действовать.
SQL Server динамически выделяет память. Чтобы задать максимальное количество памяти (в мегабайтах), которое SQL Server может выделить для буферного пула, вы можете использовать параметр max server memory (максимальная память для сервера). Поскольку SQL Server требуется определенное время для освобождения памяти, если у вас есть другие приложения, которым периодически нужна память, то для параметра max server memory можно задать такое значение, чтобы SQL Server оставлял определенную часть памяти свободной для других приложений. Значение по умолчанию – 2147483647 – означает, что SQL Server будет забирать у системы максимально возможное количество памяти, динамически освобождая память, когда она требуется другим приложениям, и снова захватывая память, когда эти приложения освобождают ее. Это рекомендованное значение для выделенной системы SQL Server. Если вы хотите изменить это значение, рассчитайте максимальный объем памяти, который вы можете предоставить SQL Server, вычитая из полного объема физической памяти количество памяти, необходимое для Windows 2000, а также для любых приложений, не относящихся к SQL Server.
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Для задания этого параметра с помощью Enterprise Manager щелкните на вкладке Memory (Память) в окне SQL Server Properties и используйте движок Maximum (MB) (Максимум [Мб]). Затем щелкните опцию Dynamically Configure SQL Server Memory (Динамическое конфигурирование памяти SQL Server). Этот параметр начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server. (Если щелкнуть опцию Use A Fixed
Параметр min server memory (минимальная память для сервера) используется для указания минимального количества памяти (в мегабайтах), которое должно выделяться для буферного пула SQL Server. Устанавливать этот параметр полезно в системах, где SQL Server, возможно, резервирует слишком много памяти для других приложений. Например, в среде, где данный сервер используется для
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Вы можете также сконфигурировать его с помощью Enterprise Manager. Щелкните на вкладке Memory (Память) в окне SQL Server Properties, используйте движок Minimum (MB) (Минимум [Мб]) и затем щелкните опцию Dynamically Configure SQL Server Memory. Этот параметр начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server.
Вы можете использовать параметр recovery interval (интервал восстановления), чтобы определить максимальное количество минут, которое может потратить система для восстановления после аварии. SQL Server использует значение этого параметра и специальный встроенный алгоритм, определяя, насколько часто следует автоматически создавать контрольные точки, чтобы восстановление занимало только указанное количество минут. SQL Server определяет длительность интервала между контрольными точками в соответствии с объемом работы, выполняемой в системе. Если выполняется много работы, то контрольные точки создаются чаще, чем при небольшом объеме работы. Чем меньше объем выполняемой работы, тем меньше времени требуется SQL Server для восстановления после аварии. И чем больше заданный интервал восстановления, тем больше будет интервал между контрольными точками.
Увеличение интервала восстановления повышает производительность системы за счет снижения количества контрольных точек. (При создании контрольной точки выполняется большое число операций записи на диск, что может несколько замедлять выполнение транзакций пользователей.) Но при этом также увеличивается количество времени, которое SQL Server потратит на восстановление. Значение по умолчанию равно 0, указывая на то, что этот интервал будет определять для вас SQL Server и время восстановления будет составлять примерно 1 минуту. Увеличивайте параметр recovery interval на свое усмотрение. Значение от 5 до 15 (минут) находится в обычных пределах, но ваш выбор зависит только от вашего согласия, чтобы пользователи ждали от 5 до 15 минут для восстановления базы данных в случае аварии системы. Обычно значение параметра recovery interval требуется увеличить, чтобы снизить частоту создания контрольных точек, предоставляя пользователям возможность более свободного выполнения операций ввода-вывода для их транзакций без прерывания.
Параметр recovery interval входит в группу дополнительных параметров: для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Вы можете задать этот параметр с помощью Enterprise Manager, щелкнув на вкладке Database Settings (Параметры базы данных) окна SQL Server Properties и задав нужное значение в поле-счетчике Recovery Interval (min). Изменение этого параметра начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server.
В этой лекции вы узнали о некоторых проблемах производительности, с которыми можете столкнуться как DBA. Вы узнали, как использовать
Этот курс провел вас через все "как, что и почему" в администрировании SQL Server 2000. Теперь вы сможете эффективно управлять своей системой и конфигурировать ее, а также легко и эффективно выполнять задачи повседневного администрирования. Авторы надеются, что вы с удовольствием прочитали этот курс.
На протяжении всего этого курса вы узнавали о средствах, которые можете использовать, и параметрах, которые можете регулировать для поиска и разрешения определенных проблем производительности. Например, в предыдущей лекции вы узнали, как выявлять проблемы, связанные с вашими операторами T-SQL и хранимыми процедурами, и как настраивать эти операторы и процедуры для получения оптимальной производительности. Назначение этой лекции – помочь вам легко находить информацию, необходимую для разрешения различных типов проблем производительности. В ней дается обзор связанных с производительностью тем, которые были изложены в других лекциях, даются ссылки на предыдущие лекции, где рассматриваются процедуры производительности, и приводится некоторая дополнительная информация о мониторинге производительности и настройке системы
Мы начнем с краткого описания термина "узкое место". Затем мы рассмотрим, как использовать Microsoft Windows 2000
К концу этой лекции вы будете готовы к выявлению узких мест, снижающих производительность, и определению их причин. Вы не всегда сможете разрешить проблемы производительности, но большинство из них поддаются разрешению, если у вас есть для этого время и ресурсы.
Термин "узкое место" (
Почти любой компонент, действующий в системе, может потенциально стать причиной узкого места. Узкое место может быть вызвано одним компонентом, таким как отдельный диск, набором компонентов, таким как
Чтобы определить наличие проблем в вашей системе, вам нужно сначала выполнить некоторые общие исследования по производительности системы. Например, определите, не сталкиваются ли пользователи с проблемой медленного отклика (время отклика больше ожидаемого), когда они выполняют запросы и модификации базы данных. Это характерный симптом проблемы производительности или узкого места. Например, вы можете обратить внимание, что при выполнении определенного запроса все другие операции, запущенные в данной системе, выполняются медленнее, чем обычно. Поэтому вы постараетесь оптимизировать этот запрос или выполнять его, когда меньшее число пользователей выполняет доступ к системе.
Еще одним способом выявления проблемы является периодическое тестирование и мониторинг системы. Для этого вы можете использовать разнообразные средства, включая Windows 2000 sp_who которую можете использовать для мониторинга
В состав Windows 2000
Чтобы использовать
(рис 36.2) Окно Windows 2000 Performance(рис 36.1) Диалоговое окно Add Counters (Добавление счетчиков)Для сохранения данных производительности в файле журнала выполните следующие шаги:
Для проверки состояния вашей системы вам следует регулярно использовать
(рис 36.6) Окно System Monitor, где показана запись для нового журнала счетчиков
Кроме использования Enterprise Manager для автоматизации повседневных административных функций вы можете использовать его как средство, помогающее в мониторинге процессов и блокировок SQL Server. (О блокировках см. лекцию 19.) Например, вы можете собирать данные о том, какие процессы используют блокировки и какие объекты блокируются (объект в данном случае – это таблица, база данных или временная таблица). Для просмотра этой информации выполните следующие шаги.
(рис 36.8) Раскрытая папка Current Activity (Текущие операции) в окне Enterprise Manager(рис 36.7) Информация папки Process Info (Информация о процессах) в окне Enterprise Manager
(рис 36.10) SPID-номера, показанные в панели Locks / Process ID(рис 36.9) Диалоговое окно Process Details Вы можете также просматривать информацию об
sp_who active GO
Результаты выполнения этой команды в Query Analyzer показаны на рис. 36.14. Если какой-либо процесс блокирован, то в колонке "blk" показан
(рис 36.14) Пример результатов запуска sp_who activeЕсли пользователи жалуются, что их транзакции выполняются медленно, вы можете запустить эту команду для поиска блокировок. Вы будете много раз сталкиваться с ситуацией, когда большинство
Вам следует время от времени выполнять мониторинг блокировок, чтобы выявлять процессы, которые удерживают блокировку слишком долго, и процессы, которые бывают блокированы слишком часто (находятся в состоянии WAIT ) из-за монопольных блокировок или блокировок по таблицам, которые удерживаются другими процессами. Но обычно в случае проблемы блокировки ваши пользователи будут жаловаться на слишком большое время отклика. Если блокирование возникает слишком часто или длится слишком долго, то вам потребуется определить, какие процессы удерживают
Теперь, узнав, как использовать средства мониторинга производительности, такие как
Одной из наиболее распространенных проблем производительности является просто недостаток мощности. Процессорная мощность системы определяется количеством, типом и скоростью центральных процессоров (ЦП) в этой системе. Если вашей системе недостает мощности ЦП, то она не может достаточно быстро обрабатывать транзакции, как это требуется пользователям. Чтобы использовать
Выполните мониторинг других характеристик системы, прежде чем увеличивать мощность ЦП. Например, если ваши операторы SQL сформированы неэффективно, то ваша система, видимо, выполняет намного больше операций обработки, чем это требуется, и оптимизация этих операторов, возможно, снизит степень использования ЦП. Или, предположим, что коэффициент попадания в кэш-память (счетчик
Обычно вы можете почти всегда повысить производительность за счет использования большего количества более быстрых ЦП. Однако в некоторых случаях при добавлении более быстрых ЦП вы должны увеличить память и мощность ввода-вывода, чтобы другие компоненты не стали причиной узкого места. Например, если у вас сначала была проблема узкого места из-за ЦП и вы разрешили эту проблему, добавив еще один ЦП, то ваша система, видимо, сможет выполнять больше работы, что приведет к увеличению количества дисковых операций ввода-вывода. В результате может возникнуть проблема узкого места из-за дисковой
Если вы действительно решили увеличить процессорную мощность, то можете добавить новые ЦП или заменить существующие ЦП на более мощные. Например, если в вашей системе два ЦП, но ее можно расширить до четырех ЦП, добавьте еще два ЦП того же типа или установите четыре новых, более быстрых ЦП. Если ваша система уже содержит максимальное количество ЦП и вам нужно увеличить процессорную мощность, постарайтесь получить более быстрые ЦП для их замены. Например, предположим, что у вас четыре ЦП, работающих со скоростью 200 МГц. Вы можете заменить их четырьмя ЦП со скоростью 500 МГц. Более быстрые ЦП способствуют сокращению времени обработки.
Количество памяти, доступной SQL Server, является одним из наиболее критичных факторов для производительности SQL Server. Важным фактором является также соотношение между памятью и мощностью
В некоторых случаях недостаточное количество памяти может приводить к узкому месту за счет диска из-за увеличения количества дисковых физических операций ввода-вывода, связанного с тем, что система не может эффективно использовать кэш. Чтобы увидеть, сколько системной памяти использует SQL Server, запустите
Чтобы определить, хватает ли кэш-памяти для SQL Server, используйте
Узкие места, возникающие в
Проблема подсистем ввода-вывода возникает вследствие ограниченности количества операций, которые можно выполнять на диске; например, определенный дисковод может выполнять не более 85 операций ввода-вывода с произвольным доступом в секунду. При слишком большой нагрузке на диски операции ввода-вывода на этих дисках поступают в очередь, что приводит к большим задержкам ввода-вывода для SQL Server. Эти большие задержки могут приводить к более длительному удерживанию блокировок или к простаиванию потоков, ожидающих освобождения какого-либо ресурса. В конечном итоге снижается производительность системы в целом, что, в свою очередь, раздражает пользователей, которые жалуются, что их транзакции выполняются слишком долго.
В большинстве случаев проблемы производительности подсистем ввода-вывода возникают потому, что был неправильно спланирован состав соответствующей
Планирование состава (sizing)
Чтобы определить, не перегружены ли ваши диски, выполняйте мониторинг счетчиков объектов PhysicalDisk и LogicalDisk в DISKPERF.
Чтобы определить, активизирован ли оператор DISKPERF, запустите следующий оператор в командной строке:
diskperf
Если DISKPERF активизирован, то появится следующее сообщение: "Physical Disk Performance counters on this system are currently set to start at boot" (Счетчики производительности физических дисков в этой системе в настоящее время установлены для запуска при загрузке системы). Если DISKPERF отключен, то появится следующее сообщение: "Both Logical and Physical Disk Performance counters on this system are now set to never start" (Оба счетчика производительности [для логического и физического диска] не будут запускаться).
Чтобы активизировать оператор DISKPERF, если он отключен, введите следующий оператор в командной строке:
diskperf -Y
Чтобы отключить DISKPERF, запустите следующий оператор:
diskperf -N
Чтобы начали действовать изменения, внесенные DISKPERF, вы должны перезагрузить компьютер. Чтобы увидеть другие параметры для DISKPERF, введите следующий оператор:
diskperf ?
Особенно важны счетчики Disk Writes/Sec (Число операций записи/сек), Disk Reads/Sec (Число операций чтения/сек), Avg. Disk Queue Length (Avg. Disk Sec/Write (Среднее время одной операции записи) и Avg. Disk Sec/Read. (Среднее время одной операции чтения). Эти счетчики помогают вам определить, не перегружена ли ваша дисковая подсистема. Эти счетчики включены в оба объекта – PhysicalDisk и LogicalDisk. Чтобы получить подробное описание информации, которую предоставляют эти счетчики, щелкните на кнопке
Рассмотрим пример использования этих счетчиков. Предположим, вы считаете, что у вас имеется проблема узкого места Avg. Disk Sec/Transfer (Средняя длительность одной передачи на диске), Avg. Disk Sec/Read и Avg. Disk Sec/Write объекта PhysicalDisk, поскольку они отражают задержку (ожидание) на диске (время, которое требуется диску для выполнения операции чтения или записи), а повышение длительности задержки является признаком того, что у вас перегружены дисководы или дисковая матрица. Общее правило состоит в том, что нормальные показания этих счетчиков должны составлять от 1 до 15 миллисекунд (от 0,001 до 0,015 секунды), но вам не следует беспокоиться, если в периоды пиковой нагрузки задержка составит 20 миллисекунд (0,020 секунды). Но если значения более 20 миллисекунд, то в вашей системе явно имеется проблема производительности, связанная с подсистемой ввода-вывода.
Вы должны также проверять счетчики Disk Writes/Sec и Disk Reads/Sec. Предположим, эти счетчики показывают, что на диске выполняется 20 операций записи и 20 операций чтения в секунду, то есть всего 40 операций ввода-вывода в секунду, а мощность диска составляет 85 операций ввода-вывода в секунду. И если в то же самое время диск дает большие задержки, то, возможно, это говорит о неисправности данного диска. А теперь предположим, что на этом диске выполняется 100 операций в секунду и длительность задержек составляет 20 миллисекунд или больше. В этом случае вам требуется увеличить количество дисков, чтобы повысить производительность.
Чтобы определить, сколько операций ввода-вывода выполняет ваша система, когда вы используете RAID-матрицу, разделите количество операций ввода-вывода в секунду, которое вы видите в
| Уровень RAID | Чтение | Запись |
|---|---|---|
| 0 | 1 | 1 |
| 1 или 10 | 1 | 2 |
| 5 | 1 | 4 |
Обычно наилучшим способом устранения узкого места
Время от времени в вашей системе могут возникать проблемы из-за неисправных компонентов. Если компонент не отказал полностью, но постепенно ухудшает свою работу, то такую проблему бывает трудно обнаружить. Поскольку эти проблемы принимают различные формы и сложны для разрешения, в данном курсе не предусмотрено их подробное изложение. Вместо этого мы рассмотрим лишь несколько основных рекомендаций для выявления проблем неисправных компонентов.
Еще одним компонентом системы, который обычно вызывает проблемы производительности, являются приложения SQL Server. Причиной этих проблем может быть код самого приложения или операторы SQL, которые запускаются из этого приложения. В этом разделе даются советы и рекомендации разрешения проблем производительности, относящихся к приложениям SQL.
Вы видели в лекции 35, насколько важно выбрать наилучший
Правильное использование индексов является критически важным для получения высокой производительности (см лекции 17 и 35). Для поиска нужных данных с помощью индекса может потребоваться всего лишь 10–20 операций ввода-вывода, в то время как для поиска нужных данных путем сканирования таблиц могут потребоваться тысячи или миллионы операций ввода-вывода. Однако индексы следует использовать с осторожностью. Напомним, что при модифицировании данных таблицы с помощью оператора INSERT, UPDATE или DELETE происходит автоматическое обновление индекса или индексов, связанных с этими данными, что требует выполнения соответствующих операций ввода-вывода в дополнение к операциям непосредственного модифицирования таблицы. Следите за тем, чтобы не создавать слишком много индексов; иначе дополнительная нагрузка, связанная с поддержкой этих индексов, будет приводить к снижению производительности.
Хранимые процедуры используются для выполнения пакета заранее откомпилированных операторов SQL на сервере (см.лекцию 21). Вызов хранимых процедур из ваших приложений вместо вызова отдельных операторов SQL способствует повышению производительности как за счет повторяемого использования операторов SQL на сервере, так и за счет сильного снижения сетевого трафика. Снижение количества данных, передаваемых между клиентами и серверами, происходит за счет того, что хранимая процедура находится на сервере, а вы можете программировать обработку и фильтрацию данных в хранимой процедуре, а не в приложении.
SQL Server 2000 является практически самонастраиваемой системой, но вы все же можете изменять способ работу вашей системы, модифицируя значения определенных параметров конфигурирования. В этом разделе вы узнаете, как конфигурировать эти параметры и как они влияют на работу вашей системы. Скорее всего, вам не потребуется изменять эти параметры, но знание их возможностей позволяет вам решать, нужно ли вам их изменение. Вы можете конфигурировать эти параметры с помощью Enterprise Manager или с помощью хранимой процедуры T-SQL sp_configure.
Чтобы использовать Enterprise Manager, щелкните правой кнопкой мыши на имени сервера, который вы хотите конфигурировать, и выберите из контекстного меню пункт Properties (Свойства), чтобы появилось окно SQL Server Properties. Это окно содержит девять вкладок, и каждая вкладка содержит параметры, которые вы можете конфигурировать. Эти вкладки и соответствующие параметры описаны в следующих разделах.
Используя sp_configure для конфигурирования этих параметров, вы должны помнить, что определенные параметры считаются дополнительными (advanced options). (В следующих разделах указывается, какие параметры являются дополнительными.) Для изменения какого-либо дополнительного параметра с помощью sp_configure вы должны задать для параметра show advanced options (показать дополнительные параметры) значение 1 (активизировать). Для этого параметра по умолчанию задано значение 0 (деактивизировать). (Этот параметр не оказывает влияния на дополнительные параметры, если вы используете Enterprise Manager.) Чтобы активизировать параметр show advanced options, используйте следующий оператор:
sp_configure "show advanced options", 1 GO
Обычно для установки любого параметра с помощью sp_configure используется следующий синтаксис:
sp_configure "имя параметра", значение
Параметр (маска "родственности") используется, чтобы указывать, на каких ЦП могут выполняться потоки SQL Server в многопроцессорной среде. Значение 0 (принятое по умолчанию) указывает, что родственность потоков определяется алгоритмами планировщика Windows 2000. Ненулевое значение задает битовую маску, определяющую ЦП, на которых могут выполняться потоки SQL Server. Десятичное значение 1 (или двоичное значение маски 00000001) указывает, что может использоваться только ЦП 1; значение 2 (или 00000010) указывает использование только ЦП 2; 3 (или 00000011) указывает использование ЦП 1 и ЦП 2, и т.д.
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать для параметра show advanced options значение 1. Вы можете также конфигурировать параметр с помощью Enterprise Manager. Для этого щелкните на вкладке Processor (Процессор) в окне SQL Server Properties и в секции Processor Control (Управление процессорами) установите флажки перед каждым ЦП (CPU), который хотите использовать для SQL Server. Щелкните на кнопке Apply (Применить) и затем щелкните на кнопке OK, чтобы сохранить данное изменение. Чтобы это изменение начало действовать, вы должны закрыть и перезапустить SQL Server.
В системе, выделенной только для SQL Server, вы должны задать такое значение параметра , чтобы использовать для SQL Server все ЦП. В системе, которая не полностью выделена для SQL Server (то есть содержит другие процессы, которым требуется время ЦП) вам, возможно, потребуется задать такую маску, чтобы для SQL Server использовались все ЦП, кроме одного.
Параметр lightweight pooling (упрощенная организация пула) используется чтобы сконфигурировать SQL Server для использования упрощенных потоков (или "волокон" – fibers). Использование "волокон" может снизить количество lightweight pooling значение 1, которое активизирует упрощенную организацию пула, и затем снова выполнить мониторинг количества
Параметр lightweight pooling относится к группе дополнительных параметров, поэтому его можно конфигурировать с помощью sp_configure, если для параметра show advanced options задано значение 1. Вы можете также конфигурировать lightweight pooling с помощью Enterprise Manager. Щелкните на вкладке Processor в окне SQL Server Properties и в секции Processor Control установите флажок Use Windows NT Fibers (Использовать "волокна" Windows NT) для его активизации или сбросьте этот флажок для деактивизации параметра. Щелкните на кнопке Apply, щелкните на кнопке OK и затем закройте и перезапустите SQL Server, чтобы этот параметр начал действовать.
SQL Server динамически выделяет память. Чтобы задать максимальное количество памяти (в мегабайтах), которое SQL Server может выделить для буферного пула, вы можете использовать параметр max server memory (максимальная память для сервера). Поскольку SQL Server требуется определенное время для освобождения памяти, если у вас есть другие приложения, которым периодически нужна память, то для параметра max server memory можно задать такое значение, чтобы SQL Server оставлял определенную часть памяти свободной для других приложений. Значение по умолчанию – 2147483647 – означает, что SQL Server будет забирать у системы максимально возможное количество памяти, динамически освобождая память, когда она требуется другим приложениям, и снова захватывая память, когда эти приложения освобождают ее. Это рекомендованное значение для выделенной системы SQL Server. Если вы хотите изменить это значение, рассчитайте максимальный объем памяти, который вы можете предоставить SQL Server, вычитая из полного объема физической памяти количество памяти, необходимое для Windows 2000, а также для любых приложений, не относящихся к SQL Server.
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Для задания этого параметра с помощью Enterprise Manager щелкните на вкладке Memory (Память) в окне SQL Server Properties и используйте движок Maximum (MB) (Максимум [Мб]). Затем щелкните опцию Dynamically Configure SQL Server Memory (Динамическое конфигурирование памяти SQL Server). Этот параметр начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server. (Если щелкнуть опцию Use A Fixed
Параметр min server memory (минимальная память для сервера) используется для указания минимального количества памяти (в мегабайтах), которое должно выделяться для буферного пула SQL Server. Устанавливать этот параметр полезно в системах, где SQL Server, возможно, резервирует слишком много памяти для других приложений. Например, в среде, где данный сервер используется для
Этот параметр относится к группе дополнительных параметров, поэтому для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Вы можете также сконфигурировать его с помощью Enterprise Manager. Щелкните на вкладке Memory (Память) в окне SQL Server Properties, используйте движок Minimum (MB) (Минимум [Мб]) и затем щелкните опцию Dynamically Configure SQL Server Memory. Этот параметр начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server.
Вы можете использовать параметр recovery interval (интервал восстановления), чтобы определить максимальное количество минут, которое может потратить система для восстановления после аварии. SQL Server использует значение этого параметра и специальный встроенный алгоритм, определяя, насколько часто следует автоматически создавать контрольные точки, чтобы восстановление занимало только указанное количество минут. SQL Server определяет длительность интервала между контрольными точками в соответствии с объемом работы, выполняемой в системе. Если выполняется много работы, то контрольные точки создаются чаще, чем при небольшом объеме работы. Чем меньше объем выполняемой работы, тем меньше времени требуется SQL Server для восстановления после аварии. И чем больше заданный интервал восстановления, тем больше будет интервал между контрольными точками.
Увеличение интервала восстановления повышает производительность системы за счет снижения количества контрольных точек. (При создании контрольной точки выполняется большое число операций записи на диск, что может несколько замедлять выполнение транзакций пользователей.) Но при этом также увеличивается количество времени, которое SQL Server потратит на восстановление. Значение по умолчанию равно 0, указывая на то, что этот интервал будет определять для вас SQL Server и время восстановления будет составлять примерно 1 минуту. Увеличивайте параметр recovery interval на свое усмотрение. Значение от 5 до 15 (минут) находится в обычных пределах, но ваш выбор зависит только от вашего согласия, чтобы пользователи ждали от 5 до 15 минут для восстановления базы данных в случае аварии системы. Обычно значение параметра recovery interval требуется увеличить, чтобы снизить частоту создания контрольных точек, предоставляя пользователям возможность более свободного выполнения операций ввода-вывода для их транзакций без прерывания.
Параметр recovery interval входит в группу дополнительных параметров: для его конфигурирования с помощью sp_configure вы должны задать значение 1 для параметра show advanced options. Вы можете задать этот параметр с помощью Enterprise Manager, щелкнув на вкладке Database Settings (Параметры базы данных) окна SQL Server Properties и задав нужное значение в поле-счетчике Recovery Interval (min). Изменение этого параметра начинает действовать сразу – без необходимости закрытия и повторного запуска SQL Server.
В этой лекции вы узнали о некоторых проблемах производительности, с которыми можете столкнуться как DBA. Вы узнали, как использовать
Этот курс провел вас через все "как, что и почему" в администрировании SQL Server 2000. Теперь вы сможете эффективно управлять своей системой и конфигурировать ее, а также легко и эффективно выполнять задачи повседневного администрирования. Авторы надеются, что вы с удовольствием прочитали этот курс.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.