Skip to content

Пакетный режим выполнения при построчном хранении в SQL Server 2022

Пересказ статьи Prakash K. Batch Execution Mode on a Rowstore in SQL Server 2022


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

Предварительные настройки для включения режима пакетного выполнения


Следует сделать, прежде чем вы сможете использовать пакетный режим:

  • Уровень совместимости (Compatibility Level) - Пакетный режим выполнения требует включения уровня совместимости не менее 150. Проверьте уровень совместимости вашей базы данных, прежде чем использовать эту возможность.

  • Аппаратное обеспечение - Пакетный режим выполнения требует доступности определенного объема памяти и ресурсов ЦП. Убедитесь, что ваше оборудование соответствует этим требованиям.

  • Таблица с построчным хранением - Пакетный режим выполнения работает только с построчно хранящимися таблицами.

Включение пакетного режима выполнения


Сначала вы должны проверить следующие вещи:

  • Проверьте, что уровень совместимости не менее 150.

  • Убедитесь, что ваш запрос написан для таблиц с построчным хранением.

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

  • Вы можете использовать приведенный ниже запрос, чтобы включить пакетный режим для построчного хранения (rowstore).

Когда это сделано, вы можете выполнить данный DDL для включения пакетного режима:

ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = ON;

Используйте этот код для отключения пакетного режима для построчного хранения:

ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = OFF;

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

Преимущества режима пакетного выполнения


Есть несколько преимуществ в использовании пакетного режима:

  • Оптимизированное использование памяти - Режим пакетного выполнения уменьшает использование памяти и сокращает выделение требуемой памяти для запросов. Это делает большие запросы более быстрыми и эффективными.

  • Улучшенная производительность запросов - Режим пакетного выполнения обрабатывает множество строк одновременно, что приводит к улучшению производительности запроса. Это означает более быстрые и более точные результаты при меньшем времени ожидания завершения запроса.

  • Лучшее использование ЦП - Режим пакетного выполнения эффективно использует ЦП, что может уменьшить в некоторых случаях полное время ЦП на запрос до 50%.

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

SELECT  [SalesOrderID]
,sum ([OrderQty]*[ProductID]) as sale
,[ModifiedDate]
FROM [Sales].[SalesOrderDetail]



Здесь уровень совместимости базы данных равен 140, и фактическим режимом выполнения является Row (построчный). Также мы включили статистику, которая позволяет нам увидеть время ЦП.



Можно увидеть, что время ЦП составило 6933мс, а прошедшее время - 13762мс. Теперь давайте выполним тот же самый запрос, установив уровень уровень совместимости в 160 и для чистоты сравнения сбросим кэш.



Теперь мы можем увидеть изменения в плане выполнения и то, что фактический режим выполнения изменился на пакетный (Batch). Давайте посмотрим на время ЦП:



Мы видим, что время ЦП составляет 2941мс, а прошедшее время - 11954. И хотя эффект не так сильно сказался на прошедшем времени, время ЦП существенно уменьшилось на 1/3, демонстрируя улучшение.

Ограничения


Имеется несколько ограничений при использовании пакетного режима.

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

  • Типы данных - Пакетный режим выполнения поддерживает только определенные типы данных и преобразования.

  • Ресурсы - Режим пакетного выполнения может потребовать дополнительных ресурсов в виде памяти и ЦП, поэтому убедитесь, что ваша система или обладает, прежде чем включать его.

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

Лучшая практика для оптимизации режима пакетного выполнения


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

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

Используйте правильную структуру запросов - Лучшее использование режима пакетного выполнения имеет место для запросов с минимальным числом соединений и подзапросов. Убедитесь, что ваши запросы оптимизированы для использования пакетного режима выполнения, прежде чем включать его.

Заключение


Режим пакетного выполнения может сыграть решающую роль в плане производительности запросов при использовании с данными построчного хранения. Следуя лучшей практике и ограничениям, описанным в данной статье, вы сможете гарантировать, что ваши запросы получат потенциальное преимущество от применения пакетного режима выполнения. Тщательно тестируйте, прежде чем использовать эту функциональность.

Ссылки по теме
1. Значение уровня совместимости базы данных в SQL Server
2. Все, что вам нужно знать о поколоночных индексах, в одной статье
3. Что такое пакетный режим при построчном хранении в SQL Server?
4. Как сделать запросы SELECT COUNT(*) очень быстрыми

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.