Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

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

Неисправные компоненты

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

  • Сравнивайте однотипные диски и дисковые массивы.Просматривая статистику в System Monitor, сравнивайте аналогичные компоненты. Например, если вы заметили, что два диска выполняют приблизительно одинаковое число операций ввода-вывода, но имеются различные задержки, то на более медленном диске, возможно, имеется проблема.
  • Следите за световыми индикаторами. Сетевые концентраторы обычно имеют индикаторы конфликтных ситуаций. Если вы заметили, что определенный сегмент сети имеет необычно высокое число конфликтов, это может быть признаком неисправного компонента, – возможно, сетевой платы или сетевого кабеля.
  • Изучайте вашу систему.Чем больше времени вы потратите на изучение своей системы, тем лучше вы будете разбираться в ее особенностях. Постепенно вы начнете понимать, когда в системе происходит что-то необычное.
  • Используйте System Monitor. Это хороший способ наблюдения за поведением системы на регулярной основе.
  • Читайте журналы событий. Примите за правило регулярно просматривать журналы системы и приложений SQL Server и Windows 2000 Event Viewer. Просматривайте эти журналы ежедневно для выявления проблем до того, как они выйдут из-под вашего контроля.
Приложения

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

Оптимизируйте планы исполнения

Вы видели в "Использование SQL Query Аnalyzer и SQL Profiler" , насколько важно выбрать наилучший план исполнения и метод доступа к данным для запроса. К сожалению, не существует какой-либо "особой формулы" определения наилучшего плана. SQL Server автоматически выбирает план исполнения, который определяется как наилучший план оптимизатором запросов. Вы можете использовать различные типы подсказок в ваших запросах, включая подсказки на уровне запросов, подсказки для таблиц и подсказки для операций связывания. Ознакомившись с этими подсказками, вы, вероятно, сможете аналитически определять наилучший план для запроса. Обычно требуется просмотреть несколько планов, прежде чем выбрать наиболее приемлемый.

Используйте индексы осмысленно

Правильное использование индексов является критически важным для получения высокой производительности (см "Создание и использование индексов" и "Использование SQL Query Аnalyzer и SQL Profiler" ). Для поиска нужных данных с помощью индекса может потребоваться всего лишь 10–20 операций ввода-вывода, в то время как для поиска нужных данных путем сканирования таблиц могут потребоваться тысячи или миллионы операций ввода-вывода. Однако индексы следует использовать с осторожностью. Напомним, что при модифицировании данных таблицы с помощью оператора INSERT, UPDATE или DELETE происходит автоматическое обновление индекса или индексов, связанных с этими данными, что требует выполнения соответствующих операций ввода-вывода в дополнение к операциям непосредственного модифицирования таблицы. Следите за тем, чтобы не создавать слишком много индексов; иначе дополнительная нагрузка, связанная с поддержкой этих индексов, будет приводить к снижению производительности.

Используйте хранимые процедуры

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