Поделиться через


Управление ресурсами пространства tempdb

Применимо к: Предварительная версия SQL Server 2025 (17.x) и более поздние версии

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

Начиная с предварительной версии SQL Server 2025 (17.x), можно использовать регулятор ресурсов для принудительного tempdb применения ограничения общего объема пространства, потребляемого группой рабочей нагрузки. Группу рабочей нагрузки можно связать с приложением, пользователем, группой пользователей и т. д. Когда запрос (запрос) пытается превысить ограничение, регулятор ресурсов прерывает его с определенной ошибкой, указывающей, что ограничение группы рабочей нагрузки было применено.

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

Пошаговые примеры конфигурации см. в руководстве. Примеры настройки управления ресурсами пространства tempdb.

Начало работы с регулятором ресурсов

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

Если вы не знакомы с регулятором ресурсов в SQL Server, ознакомьтесь с разделом "Регулятор ресурсов ", чтобы узнать о его концепциях и возможностях.

Пошаговое руководство по настройке регулятора ресурсов и рекомендации см. в руководстве. Примеры конфигурации регулятора ресурсов и рекомендации.

Установка ограничений на потребление пространства tempdb

Вы можете ограничить tempdb потребление пространства группой рабочей нагрузки одним из двух способов:

  • Задайте фиксированное ограничение с помощью аргумента GROUP_MAX_TEMPDB_DATA_MB .

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

  • Задайте ограничение процента с помощью аргумента GROUP_MAX_TEMPDB_DATA_PERCENT .

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

Дополнительные сведения о параметрах GROUP_MAX_TEMPDB_DATA_MB и аргументах GROUP_MAX_TEMPDB_DATA_PERCENT см. в разделе CREATE WORKLOAD GROUP или ALTER WORKLOAD GROUP.

Если для одной и той же группы рабочей нагрузки заданы фиксированные и процентные ограничения, фиксированное ограничение имеет приоритет над ограничением процента.

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

Конфигурация ограничения процента

Ограничения в процентах действуют только в том случае, если конфигурация файла данных tempdb соответствует требованиям, приведенным в следующей таблице.

Конфигурация Описание Максимальный размер tempdb (100%) Действует процентный лимит
- GROUP_MAX_TEMPDB_DATA_MB не задано
— Для всех файлов данных MAXSIZE не является UNLIMITED
— Для всех файлов данных FILEGROWTH не равно нулю.
tempdb Файлы данных могут автоматически увеличиваться до максимального размера. Сумма значений MAXSIZE для всех файлов данных Да
- GROUP_MAX_TEMPDB_DATA_MB не задано
Для всех файлов данных MAXSIZE является UNLIMITED
— Для всех файлов FILEGROWTH данных равно нулю.
tempdb Файлы данных преумножены до их предполагаемых размеров и не могут увеличиваться дальше. Сумма значений SIZE для всех файлов данных Да
Все остальные конфигурации нет

Следующий запрос позволяет просмотреть текущую tempdb конфигурацию файла данных:

SELECT file_id,
       name,
       size * 8. / 1024 AS size_mb,
       IIF(max_size = -1, NULL, max_size * 8. / 1024) AS maxsize_mb,
       IIF(is_percent_growth = 0, growth * 8. / 1024, NULL) AS filegrowth_mb,
       IIF(is_percent_growth = 1, growth, NULL) AS filegrowth_percent
FROM sys.master_files
WHERE database_id = 2
      AND
      type_desc = 'ROWS';

Для заданного файла в результирующем наборе:

  • maxsize_mb Если столбец имеет значение NULL, то MAXSIZE есть UNLIMITED.
  • Если filegrowth_mb или filegrowth_percent равно нулю, то FILEGROWTH равно нулю.

Если вы устанавливаете GROUP_MAX_TEMPDB_DATA_PERCENT и выполняете инструкцию ALTER RESOURCE GOVERNOR RECONFIGURE, но конфигурация файла данных не соответствует требованиям, инструкция успешно завершается, пределы процентов сохраняются, но не применяются. В этом случае вы получаете предупреждение 10989, серьезность 10, GROUP_MAX_TEMPDB_DATA_PERCENT не действует, так как требования к конфигурации tempdb не выполнены. Сообщение также регистрируется в журнале ошибок.

Чтобы границы процента стали эффективными, перенастройте tempdb файлы данных в соответствии с требованиями и выполните ALTER RESOURCE GOVERNOR RECONFIGURE заново. Дополнительные сведения о настройке SIZE, FILEGROWTH и MAXSIZE см. в разделе ALTER DATABASE: параметры файлов и файловых групп.

Замечание

Для нового экземпляра SQL Server файл MAXSIZE данных составляет UNLIMITED, а FILEGROWTH больше нуля, что означает, что ограничения процента не эффективны. Чтобы использовать ограничения процента, необходимо выполнить следующие действия.

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

      Например, если том имеет 100 ГБ свободного места и имеет два tempdb файла данных, сделайте MAXSIZE каждый файл размером 50 ГБ или меньше.

Если ограничение процента действует, и вы добавляете, удаляете или изменяете размер tempdb файлов данных, необходимо выполнить обновление ALTER RESOURCE GOVERNOR RECONFIGURE регулятора ресурсов с новым максимальным размером tempdb (100%).

Принцип работы

В этом разделе подробно описано tempdb управление ресурсами пространства.

  • Когда страницы данных в tempdb выделяются и освобождаются, диспетчер ресурсов ведет учет пространства tempdb, потребляемого каждой группой рабочей нагрузки.

    Если регулятор ресурсов включен, а tempdb для группы рабочей нагрузки задано ограничение потребления пространства, и запрос, выполняемый в группе рабочей нагрузки, пытается привести общее tempdb потребление пространства группой выше предела, запрос прерывается с ошибкой 1138, серьезностью 17, не удалось выделить новую страницу для базы данных 'tempdb', так как это превысит установленный предел для группы рабочей нагрузки 'workload-group-name'.

    При прерывании запроса с ошибкой 1138 значение в столбце total_tempdb_data_limit_violation_count динамического административного представления sys.dm_resource_governor_workload_groups DMV увеличивается на один, а расширенное событие запускается.

  • Регулятор ресурсов отслеживает все tempdb использование, которое может быть связано с группой рабочих нагрузок, включая временные таблицы, переменные (включая табличные переменные), параметры со значениями таблиц, невременные таблицы, курсоры и использование, связанное с обработкой запросов, например, спули, разливы, рабочие таблицы и tempdb рабочие файлы.

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

  • Ограничения потребления tempdb, настроенные для каждой группы рабочих нагрузок, представлены в представлении каталога sys.resource_governor_workload_groups в столбцах group_max_tempdb_data_mb и group_max_tempdb_data_percent.

    Текущее потребление и пиковое потребление пространства tempdb группой рабочей нагрузки отображаются в представлении sys.dm_resource_governor_workload_groups DMV, в столбцах tempdb_data_space_kb и peak_tempdb_data_space_kb соответственно.

    Подсказка

    tempdb_data_space_kb и peak_tempdb_data_space_kb столбцы в sys.dm_resource_governor_workload_groups поддерживаются, даже если ограничения на tempdb потребление пространства не заданы.

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

  • TempdbИспользование хранилищами версий, включая постоянное хранилище версий (PVS) при включенном ускоренном восстановлении базы данных (ADR), не регулируется, так как версии строк могут использоваться запросами в нескольких группах рабочих нагрузок.tempdb

  • Потребление tempdb пространства учитывается как количество используемых страниц данных размером 8 КБ. Даже если страница не полностью заполнена данными, она добавляет 8 КБ к tempdb потреблению группы рабочей нагрузки.

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

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

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

Различия с отслеживанием пространства на уровне сеанса

Sys.dm_db_session_space_usage DMV предоставляет tempdb статистику распределения и освобождения пространства для каждого сеанса. Даже если в группе рабочей нагрузки имеется только один сеанс, статистика использования пространства, представленная этим динамическим административным представлением, может не полностью соответствовать статистике, указанной в представлении sys.dm_resource_governor_workload_groups, по следующим причинам:

  • В отличие от sys.dm_resource_governor_workload_groups: sys.dm_db_session_space_usage
    • Не отражает tempdb использование пространства памяти текущими запущенными задачами. sys.dm_db_session_space_usage Статистика обновляется при завершении задачи. Статистика постоянно sys.dm_resource_governor_workload_groups обновляется.
    • Не отслеживает страницы карты распределения индекса (IAM). Дополнительные сведения см. в руководстве по архитектуре Pages и экстентов.
  • После удаления строк или при удалении таблицы, индекса или секции страницы данных могут быть освобождены асинхронным фоновым процессом. Это перемещение страницы может произойти с задержкой. sys.dm_resource_governor_workload_groups отражает эти освобождения страниц по мере их возникновения, даже если сеанс, вызвавший эти освобождения, был закрыт и больше не присутствует в sys.dm_db_session_space_usage.

Рекомендации по управлению ресурсами пространства tempdb

Прежде чем настраивать tempdb управление ресурсами пространства, ознакомьтесь со следующими рекомендациями.

  • Ознакомьтесь с общими рекомендациями для регулятора ресурсов.

  • Для большинства сценариев избегайте установки tempdb ограничения потребления пространства на небольшое или нулевое значение, особенно для default группы рабочей нагрузки. Если это сделать, многие распространенные задачи могут начать сбоить, если им необходимо выделить пространство в tempdb. Например, если задать фиксированное или процентное ограничение на 0 для default группы рабочей нагрузки, возможно, не удается открыть обозреватель объектов в SQL Server Management Studio (SSMS).

  • Если вы не создали пользовательские группы задач и функцию классификации, которая распределяет задачи по выделенным группам, избегайте ограничений использования tempdb группой задач default. Это может прервать запросы с ошибкой 1138, если tempdb имеет неиспользуемое пространство, которое не может быть использовано никакой пользовательской нагрузкой.

  • Допускается, чтобы сумма значений для всех групп рабочих GROUP_MAX_TEMPDB_DATA_MB нагрузок превышала максимальный tempdb размер. Например, если максимальный tempdb размер составляет 100 ГБ, GROUP_MAX_TEMPDB_DATA_MB ограничения для группы рабочей нагрузки A и группы рабочей нагрузки B могут составлять 80 ГБ.

    Этот подход по-прежнему запрещает каждой группе рабочих нагрузок использовать всё пространство в tempdb, оставив 20 ГБ для других групп. В то же время вы избегаете ненужных прерываний запросов, если свободное tempdb пространство по-прежнему доступно, так как группы рабочей нагрузки A и B , скорее всего, не используют большое количество tempdb места одновременно.

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