23.6.25

Новое в SQL Server 2025: ограничение использования tempdb добавлено в Resource Governor

Автор: Dimitri Furman, MICROSOFT, 19 мая 2025г. SQL Server 2025: introducing tempdb space resource governance

С начала существования SQL Server администраторам баз данных приходилось сталкиваться с распространённой проблемой — нехваткой места в базе данных tempdb.

Мне всегда казалось странным, что всё, что мне нужно для сбоя в работе экземпляра SQL Server, — это доступ к серверу, на котором я могу создать временную таблицу, заполняющую всю tempdb, и никто не сможет меня остановить.

- Erland Sommarskog, независимый консультант по SQL Server и Data Platform MVP

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

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

За свою карьеру я потратил больше времени, чем поддаётся подсчёту, на создание решений для управления местом в tempdb. Даже несмотря на то, что я потратил много времени и сил, всё равно возникали проблемы и сложности, особенно в многопользовательских приложениях с большим количеством баз данных и с проблемой «шумных соседей».

- Edward Pollack, работает в Transfinder архитектором данных и является Data Platform MVP

Новое решение в SQL Server 2025

Начиная с выпуска SQL Server 2025 CTP 2.0, вы можете использовать регулятор ресурсов (Resource Governor - знакомый всем функционал, доступный с SQL Server 2008) для ограничения использования места в tempdb, который будет делать это на уровне ядра сервера баз данных.

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

- Ola Hallengren, главный инженер по платформам данных в Saxo Bank и Data Platform MVP

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

Ниже показан сценарий, который ограничивает запросами занимаемое место в tempdb в группе рабочих нагрузок по умолчанию до 17 ГБ с помощью всего двух операторов T-SQL:

 

ALTER WORKLOAD GROUP [default] WITH (GROUP_MAX_TEMPDB_DATA_MB = 17408);

ALTER RESOURCE GOVERNOR RECONFIGURE;

 

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

Если запрос попытается занять место в базе данных tempdb сверх установленного ограничения для его группы рабочей нагрузки, он будет прерван с сообщением бо ошибке 1138, с уровнем серьезности 17:

Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'.

Все остальные запросы на сервере продолжат выполняться.

Задание ограничений

Резонный вопрос: Как установить правильные лимиты для разных рабочих нагрузок сервера?

Тут можно не гадать. Использование места в tempdb отслеживается во времени для каждой группы рабочих нагрузок и отображается в sys.dm_resource_governor_workload_groups. Причём это происходит даже если никакие ограничения не установлены. Вы можете определить репрезентативные модели использования для каждой рабочей нагрузки в течении времени, а затем установить правильные ограничения. Потом можно эти настройки ограничений откорректировать, если поведение рабочих нагрузок изменится.

Например, запрос ниже позволяет увидеть текущее использование места в tempdb, пики его использования и количество запросов, которые были прерваны из-за превышения лимита для каждой группы рабочей нагрузки:

SELECT group_id,

       name,

       tempdb_data_space_kb,

       peak_tempdb_data_space_kb,

       total_tempdb_data_limit_violation_count

FROM sys.dm_resource_governor_workload_groups;

В этом динамическом административном представлении добавлены колонки tempdb_data_space_kb, peak_tempdb_data_space_kb и total_tempdb_data_limit_violation_count. Пиковая нагрузка и количество прерываний запросов (из-за нарушений ограничений) отслеживается с момента перезапуска сервера. В любое время можно сбросить эти и другие статистические данные Resource Governor, чтобы начать отслеживание заново и обойтись без перезапуска сервера, выполнив:

ALTER RESOURCE GOVERNOR RESET STATISTICS;

А что насчет журнала транзакций?

Ограничения, которые можно установить для каждой группы рабочих нагрузок, применяются только к используемому месту в файлах данных tempdb. Однако, возможна ситуация, когда крупная транзакция заполнит журнал транзакций tempdb, что может привсети к сбою в работе всего сервера. Для предотвращения такой ситуации, в SQL Server 2025 можно включить функцию ускоренного восстановление базы данных tempdb (ADR), чтобы воспользоваться преимуществами агрессивного усечения журнала и значительно снизить вероятность нехватки там места. Дополнительные сведения см. в статье Улучшения ADR в SQL Server 2025.

Дополнительные сведения

Дополнительную информацию об управлении ресурсами tempdb, включая примеры, рекомендации и подробности работы, см. в разделе Управление ресурсами пространства TempDB в документации.

Если вы раньше не использовали Resource Governor, вот хорошая отправная точка: Учебное пособие: Примеры конфигурации регулятора ресурсов и передовые методы.

Комментариев нет:

Отправить комментарий