Compartir a través de


Gobernanza de recursos de espacio de Tempdb

Se aplica a: VERSIÓN preliminar de 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 la versión preliminar de SQL Server 2025 (17.x), puede usar el regulador de recursos para imponer un límite sobre el espacio total consumido por un grupo de trabajo. Un grupo de cargas de trabajo se puede asociar a una aplicación, un usuario, un grupo de usuarios, etc. Cuando una solicitud (una consulta) intenta superar el límite, el regulador de recursos lo anula con un error distinto que indica que se ha aplicado 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 .

    El límite fijo es útil cuando se conocen los requisitos de uso de la carga de trabajo tempdb de antemano o cuando tempdb el tamaño no cambia.

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

    El límite de porcentaje es útil cuando puede 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 volver a configurar el regulador de recursos. 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 se especifican 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.

Configuración del límite de porcentaje

Los límites de porcentaje solo están en vigor cuando la configuración del tempdb archivo de datos cumple los requisitos resumidos en 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
- 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 son predefinidos a sus tamaños definidos y no pueden crecer más La suma de SIZE valores para todos los archivos de datos
Todas las demás configuraciones No

La consulta siguiente le permite ver 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.

Si establece GROUP_MAX_TEMPDB_DATA_PERCENT y ejecuta la instrucción ALTER RESOURCE GOVERNOR 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, GROUP_MAX_TEMPDB_DATA_PERCENT no está en vigor porque no se cumplen los requisitos de configuración de tempdb. El mensaje también se registra en el registro de errores.

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, FILEGROWTH y MAXSIZE, vea Opciones de ALTER DATABASE de archivos y grupos de archivos.

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 de porcentaje no son efectivos. 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.

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%).

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, no se pudo asignar una nueva página para la base de datos "tempdb" porque eso superaría el límite establecido para el grupo de cargas de trabajo "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 aumente previamente los archivos de datos de tempdb a sus tamaños previstos, es posible que otros archivos consuman el espacio en los volúmenes donde se encuentra tempdb. 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 cargas de trabajo, las estadísticas de uso del espacio proporcionadas por esta DMV podrían no coincidir exactamente con las estadísticas proporcionadas en la vista de sys.dm_resource_governor_workload_groups , por los siguientes motivos:

  • 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, vea 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, las páginas de datos pueden desasignarse mediante un proceso en segundo plano asincrónico. Esta desasignación de página puede ocurrir con un retraso. 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 lo hace, es posible que muchas tareas comunes empiecen a fallar 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 haya creado grupos de cargas de trabajo personalizados y una función clasificadora que coloque las cargas de trabajo en sus grupos dedicados, evite limitar el uso de tempdb por parte del grupo de cargas de trabajo default. Esto puede anular las consultas con el error 1138 cuando tempdb todavía tiene espacio sin usar que no puede consumir ninguna carga de trabajo de usuario.

  • Se permite que la suma de los valores de todos los grupos de trabajo GROUP_MAX_TEMPDB_DATA_MB supere el tamaño máximo 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.