Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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_MBargumento .Use el límite fijo cuando conozca los requisitos de uso de la carga de trabajo
tempdbde antemano o cuando eltempdbtamaño no cambie.Establezca un límite de porcentaje mediante el
GROUP_MAX_TEMPDB_DATA_PERCENTargumento .Use el límite de porcentaje cuando pueda cambiar el tamaño máximo de
tempdbcon el tiempo y desea que eltempdbespacio 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 detempdb, también aumenta la cantidad de espacio disponible detempdbpara 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_PERCENTy 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
tempdblos archivos de datos para que cumplan los requisitos y vuelva a ejecutarseALTER RESOURCE GOVERNOR RECONFIGURE. Para obtener más información sobre cómo configurarSIZE,FILEGROWTHyMAXSIZE, 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
tempdbde los archivos de datos, debe ejecutarALTER RESOURCE GOVERNOR RECONFIGUREpara actualizar el regulador de recursos con el nuevo tamaño máximo detempdb(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
tempdba sus tamaños previstos y establecerFILEGROWTHen cero. - Establezca el
MAXSIZEde cada archivo de datos a un valor limitado. - Para cada
tempdbvolumen de archivos de datos, asegúrese de que la suma de valores deMAXSIZElos 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 dostempdbarchivos de datos, asegúrese de queMAXSIZEcada 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 espaciotempdbconsumido por cada grupo de cargas de trabajo.Si el regulador de recursos está habilitado y se establece un
tempdblí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 totaltempdbde 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_countde la vista de administración dinámica (DMV) sys.dm_resource_governor_workload_groups se incrementa en uno, y el evento extendidotempdb_data_workload_group_limit_reachedse desencadena.El regulador de recursos realiza un seguimiento de todo el
tempdbuso 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 ytempdbuso 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
tempdbse 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
tempdbpara cada grupo de cargas de trabajo se exponen en la vista de catálogo sys.resource_governor_workload_groups, en las columnasgroup_max_tempdb_data_mbygroup_max_tempdb_data_percent.El consumo actual y el consumo máximo del espacio de
tempdbpor un grupo de cargas de trabajo se exponen en la DMV sys.dm_resource_governor_workload_groups, en las columnastempdb_data_space_kbypeak_tempdb_data_space_kb, respectivamente.Sugerencia
Las columnas
tempdb_data_space_kbypeak_tempdb_data_space_kbde sys.dm_resource_governor_workload_groups se mantienen incluso si no se establecen límites en el consumo de espacio detempdb.Puede crear la función clasificadora y los grupos de cargas de trabajo sin establecer ningún límite inicialmente. Supervise
tempdbel 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.tempdbel 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 entempdb, no se rige porque las solicitudes pueden usar versiones de fila en varios grupos de cargas de trabajo.El consumo de espacio en
tempdbse 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 altempdbconsumo de un grupo de cargas de trabajo.tempdbla 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 entempdb, 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
tempdbcontrola el espacio en los archivos de datos detempdb, pero no el espacio en disco en los volúmenes subyacentes. A menos quetempdbaumente previamente los archivos de datos a sus tamaños previstos, es posible que otros archivos consuman el espacio en los volúmenes dondetempdbse encuentra. Si no hay espacio restante para que los archivos de datos detempdbcrezcan,tempdbpodría quedarse sin espacio antes de alcanzar cualquier límite en el consumo de espacio del grupo de trabajo entempdb.La gobernanza de recursos de espacio en
tempdbse aplica a los archivos de datos, pero no al archivo de registro de transacciones. Para asegurarse de que el registro de transacciones entempdbno consuma una gran cantidad de espacio, habilite ADR entempdb.
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_usagese actualizan cuando se completa una tarea. Las estadísticas desys.dm_resource_governor_workload_groupsse 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.
- No refleja el uso del espacio por parte de las tareas actualmente en ejecución. Las estadísticas de
- 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_groupsrefleja 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 ensys.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
tempdblímite de consumo de espacio en un valor pequeño o cero, especialmente para el grupo dedefaultcargas 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 entempdb. Por ejemplo, si establece el límite fijo o el límite de porcentaje en 0 para eldefaultgrupo 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
tempdbel uso deldefaultgrupo de cargas de trabajo. Si limitatempdbel consumo de espacio por parte deldefaultgrupo de cargas de trabajo, las consultas pueden devolver el error 1138. Este error se produce cuandotempdbtodaví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_MBde todos los grupos de carga de trabajo puede superar el tamaño máximo detempdb. Por ejemplo, si el tamaño máximotempdbes de 100 GB, los límites para elGROUP_MAX_TEMPDB_DATA_MBgrupo 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
tempdbdejando 20 GB para otros grupos de cargas de trabajo. Al mismo tiempo, se evitan anulaciones de consulta innecesarias porque todavía hay espaciotempdbdisponible y no es probable que los grupos de cargas de trabajo A y B consuman una gran cantidad detempdbespacio al mismo tiempo.Del mismo modo, la suma de
GROUP_MAX_TEMPDB_DATA_PERCENTvalores para todos los grupos de trabajo puede superar el 100 %. Puede asignar más espacio detempdba cada grupo si sabe que es poco probable que varios grupos ocasionen un uso elevado detempdbal 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_mbcolumna esNULL, entoncesMAXSIZEesUNLIMITED. - Cuando
filegrowth_mbofilegrowth_percentes cero, entoncesFILEGROWTHes 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
Contenido relacionado
- Gobernador de Recursos
- Tutorial: ejemplos de configuración de Resource Governor y procedimientos recomendados
- ALTER RESOURCE GOVERNOR (Transact-SQL)
- CREATE WORKLOAD GROUP (Transact-SQL)
- ALTER WORKLOAD GROUP (Transact-SQL)
- DROP WORKLOAD GROUP (Transact-SQL)
- sys.resource_governor_workload_groups (Transact-SQL)
- sys.dm_resource_governor_workload_groups (Transact-SQL)