Контрольный список для анализа медленно выполняемых запросов

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

Ниже перечислены некоторые наиболее распространенные причины медленного выполнения запросов и обновлений.

  • Медленная передача данных в сети.

  • Недостаточно памяти на серверном компьютере или недостаточно памяти для SQL Server.

  • Не хватает полезной статистики.

  • Не хватает полезных индексов.

  • Не хватает полезных индексированных представлений.

  • Не хватает полезного расслоения данных.

  • Не хватает полезного секционирования.

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

СоветСовет

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

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

    Можно использовать системный монитор Windows для контроля производительности компонентов SQL Server и компонентов, не относящихся к SQL Server. Дополнительные сведения см. в разделе Мониторинг использования ресурсов (системный монитор).

  2. Если проблема производительности связана с запросами, то какой запрос или набор запросов вызывает проблему?

    С помощью Приложение SQL Server Profiler определите медленный запрос или запросы. Дополнительные сведения см. в разделе Работа с приложением SQL Server Profiler. Используйте динамические административные представления sys.dm_exec_query_stats и sys.dm_exec_requests для поиска сходных запросов, совокупно использующих значительное количество ресурсов. Дополнительные сведения см. в разделе Поиск и настройка сходных запросов с помощью хэширования запросов и планов запросов.

  3. Инструкции по анализу производительности медленного запроса.

    После определения медленно выполняющихся запросов можно далее проанализировать производительность запросов, создав параметр showplan, который может быть текстом, XML или графическим представлением плана выполнения запросов, формируемого оптимизатором запросов. Параметр showplan можно создать при помощи параметров SET языка Transact-SQL, среды Среда SQL Server Management Studio или приложения Приложение SQL Server Profiler.

    Сведения об использовании параметров SET языка Transact-SQL для отображения текста и планов выполнения XML см. в разделе Отображение планов выполнения с помощью параметров Showplan инструкции SET (Transact-SQL).

    Сведения об использовании среды Среда SQL Server Management Studio для отображения графических планов выполнения см. в разделе Графическое отображение планов выполнения (SQL Server Management Studio).

    Сведения об использовании приложения Приложение SQL Server Profiler для отображения текста и планов выполнения XML см. в разделе Отображение плана выполнения с помощью классов событий приложения SQL Server Profiler.

    Сведения, собранные с помощью этих средств, позволяют определить, как выполняется запрос оптимизатором запросов SQL Server и какие индексы используются. Используя данные сведения, можно определить, можно ли улучшить производительность, переписав запрос, изменив индексы таблиц или изменив структуру базы данных. Дополнительные сведения см. в разделе Анализ запроса.

  4. Был ли оптимизирован запрос с помощью статистики?

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

    Дополнительные сведения см. в разделе Использование статистики для повышения производительности запросов. В этом разделе даны рекомендации по увеличению эффективности использования статистики для повышения производительности запросов. Предлагаются следующие рекомендации.

    • Использование параметров статистики на уровне базы данных. Например, следует убедиться, что включены параметры автоматического создания статистики (AUTO_CREATE_STATISTICS) и автоматического обновления статистики (AUTO_UPDATE_STATISTICS), действующие на уровне базы данных. Если они отключены, то планы запросов могут быть неоптимальными и производительность запросов может понизиться.

    • Определение условий создания статистики. В некоторых случаях можно усовершенствовать планы запросов, создав дополнительную статистику с помощью инструкции CREATE STATISTICS (Transact-SQL). Эта дополнительная статистика может фиксировать статистическую корреляцию, которую не учитывает оптимизатор запросов при создании статистики для индексов или отдельных столбцов.

    • Определение условий обновления статистики. В некоторых случаях можно улучшить план запроса и тем самым повысить производительность запроса, обновляя статистику чаще, чем она обновляется при включенном параметре AUTO_UPDATE_STATISTICS. Статистику можно обновлять инструкцией UPDATE STATISTICS или хранимой процедурой sp_updatestats.

    • Создание запросов, эффективно использующих статистику. Некоторые особенности реализации запросов, например использование локальных переменных и сложных выражений в предикате запроса, могут привести к созданию неоптимальных планов запросов. Этого можно избежать, если следовать рекомендациям по конструированию запросов.

  5. Доступны ли подходящие индексы? Улучшит ли производительность запроса добавление одного или более индексов? Дополнительные сведения см. в разделах Общие рекомендации по проектированию индексов, Поиск отсутствующих индексов и Обзор помощника по настройке ядра СУБД. Помощник по настройке компонента Database Engine также может рекомендовать создание необходимых статистических показателей.

  6. Имеются ли какие-нибудь данные или наиболее активные участки индексов? Возможно, будет полезно расслоение дисков. Расслоение дисков можно выполнить с использованием RAID (резервного массива независимых дисков) уровня 0, когда данные распределяются на несколько дисковых носителей. Дополнительные сведения см. в разделах Работа с файлами и файловыми группами и RAID.

  7. Поддерживается ли в оптимизаторе запросов самая лучшая возможность оптимизации сложного запроса? Дополнительные сведения см. в разделе Рекомендации по настройке запроса.

  8. Если объем данных большой, необходимо ли секционирование данных? Управляемость данных является главным преимуществом секционирования, но секционирование может также повысить производительность запроса, если таблицы и индексы таблиц секционируются подобным образом. Дополнительные сведения см. в разделах Основные сведения о секционировании и Настройка физической структуры базы данных.