Интеллектуальное управление производительностью
SQL Server и SQL Azure включают в себя автоматизацию для стабильной производительности приложения. Эти возможности автоматизации совместно называются интеллектуальной производительностью.
Интеллектуальное управление производительностью в SQL Azure включает в себя интеллектуальную обработку запросов, автоматическое исправление плана и автоматическую настройку.
Интеллектуальная обработка запросов
Интеллектуальная обработка запросов (IQP) — это набор новых возможностей, встроенных в обработчик запросов. Его можно включить с помощью последнего уровня совместимости базы данных. Приложения могут повысить производительность с помощью последнего уровня совместимости базы данных. Изменения кода не требуются. Примером IQP является отложенная компиляция табличной переменной, которая позволяет ускорить выполнение запросов с использованием табличных переменных
База данных SQL Azure и Управляемый экземпляр SQL Azure поддерживают тот же уровень совместимости базы данных( 150) для использования IQP в качестве SQL Server 2019 и более поздних версий.
Автоматическое исправление плана
Регрессии плана запросов — это одна из наиболее сложных проблем с производительностью, решаемых с помощью SQL Server. Регрессия плана запроса возникает, когда один и тот же запрос перекомпилируется, и новый план приводит к ухудшению производительности.
В SQL Server 2017 и базе данных SQL Azure представлена концепция автоматического исправления плана путем анализа данных в хранилище запросов. Если хранилище запросов включено в базе данных в SQL Server 2017 (или более поздней версии) и в базе данных SQL Azure, подсистема SQL Server будет искать регрессии плана запроса и предоставлять рекомендации. Эти рекомендации можно просмотреть в динамическом sys.dm_db_tuning_recommendations
представлении управления (DMV). Эти рекомендации включают инструкции T-SQL, позволяющие вручную установить план запроса на момент, когда производительность была хорошей.
Если есть уверенность в этих рекомендациях, можно включить принудительную автоматическую установку планов при обнаружении регрессии в SQL Server. Включите автоматическое исправление плана с помощью ALTER DATABASE
аргумента AUTOMATIC_TUNING
.
Для базы данных SQL Azure можно также включить автоматическое исправление плана через параметры автоматической настройки на портале Azure или в интерфейсах API. Рекомендации автоматического исправления плана всегда включены для любой базы данных, в которой включено хранилище запросов (оно включено по умолчанию в базе данных SQL Azure и Управляемом экземпляре SQL Azure). Для новых баз данных автоматическое исправление плана (FORCE_PLAN
) по умолчанию включено для База данных SQL Azure.
Автоматическая настройка для базы данных SQL Azure
Автоматическое исправление плана является примером автоматической настройки в SQL Azure и SQL Server, но уникальный аспект автоматической настройки для База данных SQL Azure является автоматическим индексированием.
Примечание.
Автоматическое индексирование на данный момент недоступно в Управляемом экземпляре SQL.
Облако дает Майкрософт способ для предоставления дополнительных служб в виде рекомендаций по производительности и автоматизации за пределами рекомендаций по плану. Эта возможность называется автоматической настройкой для базы данных SQL Azure. Эти службы выполняются как фоновые программы, которые анализируют данные производительности из экземпляра базы данных SQL Azure. Эти службы включены в цену любой подписки базы данных.
Основной сценарий, для которого предназначена автоматическая настройка, связан с индексами. Автоматическая настройка анализирует данные телеметрии базы данных, включая хранилище запросов и динамические административные представления, чтобы рекомендуется создавать индексы, которые могут повысить производительность приложения. Кроме того, можно включить автоматическую настройку, чтобы автоматически создавать индексы, которые могут улучшить производительность запросов. Автоматическая настройка также ведет наблюдение за изменениями индексов и рекомендует удаление или автоматически удаляет индексы, которые не улучшают производительность запросов.
Автоматическая настройка базы данных SQL Azure требует консервативного подхода к рекомендации индексов. Это означает, что рекомендации, которые могут отображаться в динамическом административном представлении, или sys.dm_db_missing_index_details
план отображения запроса, могут не отображаться немедленно в качестве рекомендаций для автоматической настройки. Службы автоматической настройки отслеживают запросы с течением времени и используют алгоритмы машинного обучения, чтобы сделать рекомендации, чтобы действительно повлиять на производительность запросов.
Имейте в виду, что автоматическая настройка рекомендаций по индексам не учитывает издержки производительности, вызванные индексом для таких операций, как вставка, обновление или удаление. Как правило, новые некластеризованные индексы, создаваемые функцией автоматических индексов, оказывают значительное положительное влияние на производительность.
Параметризованные запросы представляют собой дополнительный сценарий для автоматической настройки. Запросы с не параметризованными значениями могут привести к затратам на производительность, так как план выполнения перекомпилируется каждый раз, когда не параметризованные значения отличаются. Во многих случаях одни и те же запросы с разными значениями параметров создают одинаковые планы выполнения. Однако эти планы по-прежнему добавляются в кэш планов отдельно. Процесс перекомпиляции планов выполнения использует ресурсы базы данных, увеличивает длительность выполнения запроса и переполняет кэш планов. Эти события, в свою очередь, вызывают исключение планов из кэша.
Для решения этого сценария можно использовать оптимизацию конфиденциального плана параметров (PSP). Оптимизация PSP автоматически включает несколько активных кэшируемых планов для одной параметризованной инструкции. Кэшированные планы выполнения учитывают различные размеры данных на основе значений параметров среды выполнения, предоставленных клиентом.
Пример индексов с автоматической настройкой в базе данных SQL Azure.
Ниже приведен пример с портала Azure, где индексы рекомендуются для базы данных на основе анализа рабочей нагрузки с течением времени. Мы еще не отправили достаточно действий в песочницу База данных SQL Azure для создания рекомендаций. CREATE INDEX
рекомендации создаются с течением времени при захвате рабочей нагрузки, а не в небольшом интервале времени этого упражнения.
В портал Azure в обзоре производительности можно просмотреть сведения о производительности для пяти первых запросов, потребляющих ресурсы, как показано в хранилище запросов. Кроме того, там приводятся рекомендации.
Портал Azure также предлагает анализ производительности запросов — визуальное средство создания отчетов на основе хранилища запросов. В этом примере анализ производительности запросов показывает конкретный запрос, использующий больше всего ресурсов, и рекомендации по улучшению производительности запросов.
Портал Azure также предоставляет способ непосредственного просмотра рекомендаций по производительности.
В этом представлении вы увидите конкретные рекомендации и историю действий по автоматической настройке. Для индекса отображаются сведения об индексе и таблице. Параметр Автоматизировать включает автоматическую настройку.
Вы можете задать параметры автоматической настройки на уровне сервера базы данных или базы данных. Если вы включили автоматическую настройку в этом сценарии, индекс будет создан автоматически.
Вы также можете просматривать параметры автоматической настройки с помощью динамического административного sys.database_automatic_tuning_options
представления.
Примечание.
Рекомендации и автоматизация для индексов и планов с учетом параметров недоступны для Управляемый экземпляр SQL Azure или SQL Server. Доступно автоматическое исправление плана.
Если щелкнуть рекомендуемый индекс, вы получите дополнительные сведения об этом конкретном индексе.
Вы увидите сведения об индексе, таблице и необходимом пространстве. Вы можете применить рекомендуемый индекс или просмотреть сценарий T-SQL, в котором применяется индекс.
Обратите внимание, что это некластеризованный индекс, который применяется в качестве индекса в режиме "в сети". Если индекс был применен на основании рекомендации (вручную или с помощью автоматической настройки), механизм рекомендаций также будет отслеживать производительность запросов за некоторый период времени с примененным индексом. Если производительность запросов снижается по сравнению с ситуацией до применения индекса, вы можете удалить индекс.