Gobernanza de recursos de espacio de Tempdb

Se aplica a: SQL Server 2025 (17.x) y versiones posteriores

Cuando se habilita la tempdb gobernanza de recursos de espacio, se mejora la confiabilidad y se evitan interrupciones al impedir que las consultas o cargas de trabajo descontroladas consuman una gran cantidad de espacio en tempdb.

A partir de SQL Server 2025 (17.x), puede usar el regulador de recursos para aplicar un límite en la cantidad total de espacio consumido por un grupo de cargas de tempdb trabajo. Cuando una solicitud (una consulta) intenta superar el límite, el regulador de recursos lo anula con un error distinto que indica que se aplica el límite del grupo de cargas de trabajo.

En efecto, puede crear particiones del espacio compartido tempdb entre diferentes cargas de trabajo. Por ejemplo, puede establecer un límite mayor para un grupo de cargas de trabajo usado por una aplicación crítica y establecer un límite inferior para el default grupo de cargas de trabajo usado por todas las demás cargas de trabajo.

Para ver ejemplos de configuración paso a paso, consulte Tutorial: Ejemplos para configurar la gobernanza de recursos del espacio tempdb.

Comienza a usar el regulador de recursos

El regulador de recursos proporciona un marco flexible para establecer diferentes tempdb límites de espacio para diferentes aplicaciones, usuarios, grupos de usuarios, etc. También puede establecer límites en función de la lógica personalizada.

Si no está familiarizado con el regulador de recursos en SQL Server, consulte Regulador de recursos para obtener información sobre sus conceptos y funcionalidades.

Para ver un tutorial de configuración del regulador de recursos y procedimientos recomendados, consulte Tutorial: Ejemplos de configuración del regulador de recursos y procedimientos recomendados.

Establecimiento de límites en el consumo de espacio de tempdb

Puede limitar tempdb el consumo de espacio por un grupo de cargas de trabajo de una de estas dos maneras:

  • Establezca un límite fijo mediante el GROUP_MAX_TEMPDB_DATA_MB argumento .

    Use el límite fijo cuando conozca los requisitos de uso de la carga de trabajo tempdb de antemano o cuando el tempdb tamaño no cambie.

  • Establezca un límite de porcentaje mediante el GROUP_MAX_TEMPDB_DATA_PERCENT argumento .

    Use el límite de porcentaje cuando pueda cambiar el tamaño máximo de tempdb con el tiempo y desea que el tempdb espacio disponible para cada grupo de cargas de trabajo cambie proporcionalmente sin cambiar la configuración del grupo de cargas de trabajo. Por ejemplo, si escala una máquina virtual de Azure que ejecuta SQL Server y aumenta el tamaño máximo de tempdb, también aumenta la cantidad de espacio disponible de tempdb para cada grupo de cargas de trabajo con un límite de porcentaje.

Para obtener más información sobre los GROUP_MAX_TEMPDB_DATA_MB argumentos y GROUP_MAX_TEMPDB_DATA_PERCENT , vea CREATE WORKLOAD GROUP o ALTER WORKLOAD GROUP.

Si especifica límites fijos y por ciento para el mismo grupo de cargas de trabajo, el límite fijo tiene prioridad sobre el límite de porcentaje.

En una instancia de SQL Server determinada, puede tener una combinación de grupos de cargas de trabajo con límites fijos, límites de porcentaje o sin límites en el tempdb consumo de espacio. Para ver los límites efectivos, consulte el ejemplo Visualización de límites de espacio tempdb efectivos por grupo de cargas de trabajo .

Configuración del límite de porcentaje

Al ejecutar la ALTER RESOURCE GOVERNOR RECONFIGURE instrucción , los límites de porcentaje surten efecto según la tabla siguiente:

Configuración Descripción Tamaño máximo de Tempdb (100%) Límite de porcentaje en vigor
- GROUP_MAX_TEMPDB_DATA_MB no se ha establecido
- Para todos los archivos de datos, MAXSIZE no es UNLIMITED
- Para todos los archivos de datos, FILEGROWTH no es cero.
tempdb los archivos de datos pueden crecer automáticamente hasta su tamaño máximo La suma de MAXSIZE valores para todos los archivos de datos Sí
- GROUP_MAX_TEMPDB_DATA_MB no se ha establecido
- Para todos los archivos de datos, MAXSIZE es UNLIMITED
- Para todos los archivos de datos FILEGROWTH, es cero.
tempdb los archivos de datos están preasignados hasta su tamaño previsto y no pueden ampliarse más La suma de SIZE valores para todos los archivos de datos Sí
Todas las demás configuraciones No

Para ver la configuración de tempdb, consulte el ejemplo Ver la configuración del archivo de datos de tempdb.

Al usar límites de porcentaje, tenga en cuenta lo siguiente:

  • Si establece GROUP_MAX_TEMPDB_DATA_PERCENT y ejecuta la ALTER RESOURCE GOVERNOR instrucción RECONFIGURE , pero la configuración del archivo de datos no cumple los requisitos, la instrucción se completa correctamente y los límites de porcentaje se almacenan, pero no se aplican. En este caso, recibirá el mensaje de advertencia 10989, gravedad 10, que también se registra en el registro de errores:

    GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb
    configuration requirements aren't met.
    
  • Para que los límites de porcentaje sean efectivos, vuelva a configurar tempdb los archivos de datos para que cumplan los requisitos y vuelva a ejecutarse ALTER RESOURCE GOVERNOR RECONFIGURE . Para obtener más información sobre cómo configurar SIZE, FILEGROWTHy MAXSIZE, vea ALTER DATABASE Opciones de archivo y grupo de archivos.

  • Si hay un límite de porcentaje en vigor y agrega, quita o cambia el tamaño tempdb de los archivos de datos, debe ejecutar ALTER RESOURCE GOVERNOR RECONFIGURE para actualizar el regulador de recursos con el nuevo tamaño máximo de tempdb (100%).

Nota:

Para una nueva instancia de SQL Server, el archivo de datos MAXSIZE es UNLIMITED y FILEGROWTH es mayor que cero, lo que significa que los límites porcentuales no surten efecto. Para utilizar los límites de porcentaje, debe hacer una de las siguientes acciones:

  • Aumentar previamente los archivos de datos de tempdb a sus tamaños previstos y establecer FILEGROWTH en cero.
  • Establezca el MAXSIZE de cada archivo de datos a un valor limitado.
  • Para cada tempdb volumen de archivos de datos, asegúrese de que la suma de valores de MAXSIZE los archivos del volumen sea menor o igual que el espacio en disco disponible en el volumen. Por ejemplo, si un volumen tiene 100 GB de espacio libre y tiene dos tempdb archivos de datos, asegúrese de que MAXSIZE cada archivo sea de 50 GB o menos.

Cómo funciona

En esta sección se describe tempdb la gobernanza de recursos de espacio en detalle.

  • A medida que se asignan y desasignan páginas de datos en tempdb, el regulador de recursos mantiene la contabilidad del espacio tempdb consumido por cada grupo de cargas de trabajo.

    Si el regulador de recursos está habilitado y se establece un tempdb límite de consumo de espacio para un grupo de cargas de trabajo y una solicitud (una consulta) que se ejecuta en el grupo de cargas de trabajo intenta llevar el consumo total tempdb de espacio por encima del límite, la solicitud se anula con el error 1138, gravedad 17:

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

    Cuando se anula una solicitud con el error 1138, el valor en la columna total_tempdb_data_limit_violation_count de la vista de administración dinámica (DMV) sys.dm_resource_governor_workload_groups se incrementa en uno, y el evento extendido tempdb_data_workload_group_limit_reached se desencadena.

  • El regulador de recursos realiza un seguimiento de todo el tempdb uso que se puede atribuir a un grupo de cargas de trabajo, incluidas tablas temporales, variables (incluidas variables de tabla), parámetros con valores de tabla, tablas nontemporarias, cursores y tempdb uso durante el procesamiento de consultas, como colas, desbordamientos, tablas de trabajo y archivos de trabajo.

    El consumo de espacio para las tablas temporales globales y las tablas no temporales en tempdb se tiene en cuenta bajo el grupo de carga de trabajo que inserta la primera fila en la tabla, incluso si sesiones de otros grupos de carga de trabajo agregan, modifican o quitan filas de la misma tabla.

  • Los límites de consumo configurados de tempdb para cada grupo de cargas de trabajo se exponen en la vista de catálogo sys.resource_governor_workload_groups, en las columnas group_max_tempdb_data_mb y group_max_tempdb_data_percent.

    El consumo actual y el consumo máximo del espacio de tempdb por un grupo de cargas de trabajo se exponen en la DMV sys.dm_resource_governor_workload_groups, en las columnas tempdb_data_space_kb y peak_tempdb_data_space_kb, respectivamente.

    Sugerencia

    Las columnas tempdb_data_space_kb y peak_tempdb_data_space_kb de sys.dm_resource_governor_workload_groups se mantienen incluso si no se establecen límites en el consumo de espacio de tempdb.

    Puede crear la función clasificadora y los grupos de cargas de trabajo sin establecer ningún límite inicialmente. Supervise tempdb el uso de cada grupo con el tiempo para establecer patrones de uso representativos y, a continuación, establezca los límites según sea necesario.

  • tempdb el uso de los almacenes de versiones, incluido el almacén de versiones persistente (PVS) cuando la recuperación acelerada de bases de datos (ADR) está habilitada en tempdb, no se rige porque las solicitudes pueden usar versiones de fila en varios grupos de cargas de trabajo.

  • El consumo de espacio en tempdb se contabiliza como el número de páginas de datos de 8 KB usadas. Incluso si una página no se rellena completamente con datos, agrega 8 KB al tempdb consumo de un grupo de cargas de trabajo.

  • tempdb la contabilidad del espacio se mantiene durante toda la duración de un grupo de trabajo. Si se quita un grupo de cargas de trabajo mientras las tablas temporales globales o las tablas nontemporarias con los datos contabilizados en este grupo de cargas de trabajo permanecen en tempdb, el espacio usado por estas tablas no se contabiliza en ningún otro grupo de cargas de trabajo.

  • La gobernanza de recursos de espacio de tempdb controla el espacio en los archivos de datos de tempdb, pero no el espacio en disco en los volúmenes subyacentes. A menos que tempdb aumente previamente los archivos de datos a sus tamaños previstos, es posible que otros archivos consuman el espacio en los volúmenes donde tempdb se encuentra. Si no hay espacio restante para que los archivos de datos de tempdb crezcan, tempdb podría quedarse sin espacio antes de alcanzar cualquier límite en el consumo de espacio del grupo de trabajo en tempdb.

  • La gobernanza de recursos de espacio en tempdb se aplica a los archivos de datos, pero no al archivo de registro de transacciones. Para asegurarse de que el registro de transacciones en tempdb no consuma una gran cantidad de espacio, habilite ADR en tempdb.

Diferencias en el seguimiento del espacio a nivel de sesión

El sys.dm_db_session_space_usage DMV proporciona tempdb estadísticas de asignación de espacio y desasignación para cada sesión. Incluso si solo hay una sesión en un grupo de carga de trabajo, es posible que las estadísticas de uso del espacio de esta DMV no coincidan exactamente con las estadísticas de la vista sys.dm_resource_governor_workload_groups, por las siguientes razones:

  • A diferencia de sys.dm_resource_governor_workload_groups, sys.dm_db_session_space_usage:
    • No refleja el uso del espacio por parte de las tareas actualmente en ejecución. Las estadísticas de sys.dm_db_session_space_usage se actualizan cuando se completa una tarea. Las estadísticas de sys.dm_resource_governor_workload_groups se actualizan continuamente.
    • No realiza un seguimiento de las páginas del mapa de asignación de índices (IAM). Para obtener más información, consulte La guía de arquitectura de páginas y extensiones.
  • Una vez eliminadas las filas o cuando se quita o trunca una tabla, índice o partición, el motor de base de datos desasigna las páginas de datos. La desasignación puede ser sincrónica o llevarse a cabo mediante un proceso en segundo plano asíncrono. sys.dm_resource_governor_workload_groups refleja estas desasignaciones de página a medida que se producen, incluso si la sesión que provocó estas desasignaciones se cerró y ya no está presente en sys.dm_db_session_space_usage.

Procedimientos recomendados para la gobernanza de recursos de espacio tempdb

Antes de configurar la gobernanza de tempdb recursos de espacio, tenga en cuenta los procedimientos recomendados siguientes:

  • Revise los procedimientos recomendados generales para el regulador de recursos.

  • En la mayoría de los escenarios, evite establecer el tempdb límite de consumo de espacio en un valor pequeño o cero, especialmente para el grupo de default cargas de trabajo. Si establece este límite en un valor pequeño o cero, es posible que muchas tareas comunes empiecen a producir errores si necesitan asignar espacio en tempdb. Por ejemplo, si establece el límite fijo o el límite de porcentaje en 0 para el default grupo de cargas de trabajo, es posible que no pueda abrir el Explorador de objetos en SQL Server Management Studio (SSMS).

  • A menos que cree grupos de cargas de trabajo personalizados y una función clasificadora que coloque cargas de trabajo en sus grupos dedicados, evite limitar tempdb el uso del default grupo de cargas de trabajo. Si limita tempdb el consumo de espacio por parte del default grupo de cargas de trabajo, las consultas pueden devolver el error 1138. Este error se produce cuando tempdb todavía tiene espacio sin usar que no puede consumir ninguna carga de trabajo de usuario.

  • La suma de los valores de GROUP_MAX_TEMPDB_DATA_MB de todos los grupos de carga de trabajo puede superar el tamaño máximo de tempdb. Por ejemplo, si el tamaño máximo tempdb es de 100 GB, los límites para el GROUP_MAX_TEMPDB_DATA_MB grupo de cargas de trabajo A y el grupo de cargas de trabajo B pueden ser de 80 GB cada uno.

    Este enfoque sigue evitando que cada grupo de cargas de trabajo consuma todo el espacio en tempdb dejando 20 GB para otros grupos de cargas de trabajo. Al mismo tiempo, se evitan anulaciones de consulta innecesarias porque todavía hay espacio tempdb disponible y no es probable que los grupos de cargas de trabajo A y B consuman una gran cantidad de tempdb espacio al mismo tiempo.

    Del mismo modo, la suma de GROUP_MAX_TEMPDB_DATA_PERCENT valores para todos los grupos de trabajo puede superar el 100 %. Puede asignar más espacio de tempdb a cada grupo si sabe que es poco probable que varios grupos ocasionen un uso elevado de tempdb al mismo tiempo.

Ejemplos

Visualización de la configuración del archivo de datos tempdb

En la consulta siguiente se muestra la configuración actual tempdb del archivo de datos:

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';

Para un archivo determinado en el conjunto de resultados:

  • Si la maxsize_mb columna es NULL, entonces MAXSIZE es UNLIMITED.
  • Cuando filegrowth_mb o filegrowth_percent es cero, entonces FILEGROWTH es cero.

Visualización de límites de espacio tempdb efectivos por grupo de cargas de trabajo

En la consulta siguiente se muestra el límite de consumo de espacio efectivo tempdb para cada grupo de cargas de trabajo. El límite se devuelve en megabytes para la configuración de límite fijo o de límite de porcentaje .

Si la group_effective_limit_mb columna es NULL, significa una de las siguientes opciones:

  • No se ha configurado ningún límite fijo ni por ciento.
  • No se cumplen los requisitos para usar la configuración de límite de porcentaje.
SELECT wg.group_id,
       wg.name,
       tf.tempdb_max_size_mb,
       CASE
           WHEN wg.group_max_tempdb_data_mb IS NOT NULL
               THEN wg.group_max_tempdb_data_mb
           WHEN wg.group_max_tempdb_data_percent IS NOT NULL AND tf.tempdb_max_size_mb IS NOT NULL
               THEN 0.01 * wg.group_max_tempdb_data_percent * tf.tempdb_max_size_mb
       ELSE NULL END AS group_effective_limit_mb
FROM sys.resource_governor_workload_groups AS wg
CROSS APPLY (
    SELECT IIF (SUM(IIF (max_size <> -1
        AND growth > 0, 1, 0)) = COUNT(1) /* autogrow up to the maxsize */
        OR SUM(IIF (max_size = -1
        AND growth = 0, 1, 0)) = COUNT(1), /* pregrown and fixed */
        SUM(IIF (growth = 0, size, max_size)) * 8 / 1024., NULL) AS tempdb_max_size_mb
    FROM sys.master_files
    WHERE database_id = 2
        AND type_desc = 'ROWS'
) AS tf;

Paso siguiente