Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x) e versões posteriores
Ao habilitar o gerenciamento de recursos de espaço tempdb, você aumenta a confiabilidade e evita interrupções, impedindo que consultas ou cargas de trabalho descontroladas consumam grandes quantidades de espaço em tempdb.
A partir do SQL Server 2025 (17.x), você pode usar o administrador de recursos para impor um limite na quantidade total de espaço consumido por um grupo de tempdb carga de trabalho. Quando uma solicitação (uma consulta) tenta exceder o limite, o administrador de recursos a anula com um erro distinto indicando que o limite do grupo de carga de trabalho é imposto.
Na verdade, você pode particionar o espaço compartilhado tempdb entre cargas de trabalho diferentes. Por exemplo, você pode definir um limite mais alto para um grupo de carga de trabalho usado por um aplicativo crítico e definir um limite menor para o default grupo de carga de trabalho usado por todas as outras cargas de trabalho.
Para obter exemplos de configuração passo a passo, consulte Tutorial: Exemplos para configurar a governança de recursos de espaço tempdb.
Introdução ao administrador de recursos
O administrador de recursos fornece uma estrutura flexível para definir limites de espaço diferentes tempdb para diferentes aplicativos, usuários, grupos de usuários etc. Você também pode definir limites com base na lógica personalizada.
Se você não estiver familiarizado com o administrador de recursos no SQL Server, consulte o administrador de recursos para saber mais sobre seus conceitos e funcionalidades.
Para obter um passo a passo e as práticas recomendadas de configuração do administrador de recursos, consulte Tutorial: Exemplos de configuração do administrador de recursos e práticas recomendadas.
Definir limites de consumo de espaço tempdb
Você pode limitar tempdb o consumo de espaço por um grupo de carga de trabalho de duas maneiras:
Defina um limite fixo usando o
GROUP_MAX_TEMPDB_DATA_MBargumento.Use o limite fixo quando souber os requisitos de uso da carga de trabalho
tempdbcom antecedência ou quando otempdbtamanho não for alterado.Defina um limite de porcentagem usando o
GROUP_MAX_TEMPDB_DATA_PERCENTargumento.Use o limite de porcentagem quando você pode alterar o tamanho máximo ao longo do tempo e quiser que o
tempdbespaço disponível para cada grupo de carga de trabalho seja alterado proporcionalmente sem alterar a configuração dotempdbgrupo de carga de trabalho. Por exemplo, se você escalar uma VM do Azure executando SQL Server e aumentar o tamanho máximotempdb, otempdbespaço disponível para cada grupo de carga de trabalho com um limite percentual também aumentará.
Para obter mais informações sobre os argumentos GROUP_MAX_TEMPDB_DATA_MB e GROUP_MAX_TEMPDB_DATA_PERCENT, consulte CREATE WORKLOAD GROUP ou ALTER WORKLOAD GROUP.
Se você especificar limites fixos e percentuais para o mesmo grupo de carga de trabalho, o limite fixo terá precedência acima do limite percentual.
Em uma determinada instância do SQL Server, você pode ter uma combinação de grupos de carga de trabalho com limites fixos, limites de porcentagem ou nenhum limite de tempdb consumo de espaço. Para exibir limites efetivos, consulte o exemplo de exibir limites efetivos de espaço tempdb por grupo de carga de trabalho .
Configuração de limite de porcentagem
Ao executar a instrução, os ALTER RESOURCE GOVERNOR RECONFIGURE limites percentuais entrarão em vigor de acordo com a tabela a seguir:
| Configuração | Descrição | Tamanho máximo do tempdb (100%) | Limite de porcentagem em vigor |
|---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB não está definido- Para todos os arquivos de dados, MAXSIZE não é UNLIMITED- Para todos os arquivos de dados, FILEGROWTH não é zero |
tempdb os arquivos de dados podem aumentar automaticamente até o tamanho máximo |
A soma dos valores de MAXSIZE para todos os arquivos de dados |
Sim |
-
GROUP_MAX_TEMPDB_DATA_MB não está definido- Para todos os arquivos de dados, MAXSIZE é UNLIMITED- Para todos os arquivos de dados, FILEGROWTH é zero |
tempdb os arquivos de dados são pré-fabricados para seus tamanhos pretendidos e não podem crescer ainda mais |
A soma dos valores de SIZE para todos os arquivos de dados |
Sim |
| Todas as outras configurações | Não |
Para exibir a configuração do tempdb, consulte o exemplo Exibir configuração do arquivo de dados do tempdb.
Ao usar limites de porcentagem, considere o seguinte:
Se você definir
GROUP_MAX_TEMPDB_DATA_PERCENTe executar a ALTER RESOURCE GOVERNOR instrução RECONFIGURE , mas a configuração do arquivo de dados não atender aos requisitos, a instrução será concluída com êxito e os limites de porcentagem serão armazenados, mas eles não serão impostos. Nesse caso, você recebe a mensagem de aviso 10989, severidade 10, que também é registrada no log de erros:GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Para tornar os limites de porcentagem eficazes, reconfigure
tempdbos arquivos de dados para atender aos requisitos e executeALTER RESOURCE GOVERNOR RECONFIGUREnovamente. Para obter mais informações sobre como configurarSIZE,FILEGROWTHeMAXSIZE, consulte ALTER DATABASE Opções de Arquivo e Grupo de Arquivos.Se um limite percentual estiver em vigor e você adicionar, remover ou redimensionar
tempdbarquivos de dados, será necessário executarALTER RESOURCE GOVERNOR RECONFIGUREpara atualizar o administrador de recursos com o novo tamanho máximo detempdb(100%).
Observação
Para uma nova instância de SQL Server, o arquivo MAXSIZE de dados é UNLIMITED e FILEGROWTH é maior que zero, o que significa que os limites percentuais não são eficazes. Para usar os limites de porcentagem, você deve:
- Redimensionar previamente os arquivos de dados
tempdbpara seus tamanhos pretendidos e definirFILEGROWTHcomo zero. - Defina o
MAXSIZEde cada arquivo de dados para um valor limitado. - Para cada
tempdbvolume de arquivo de dados, verifique se a soma dos valores paraMAXSIZEarquivos no volume é menor ou igual ao espaço em disco disponível no volume. Por exemplo, se um volume tiver 100 GB de espaço livre e tiver doistempdbarquivos de dados, faça com que cadaMAXSIZEarquivo tenha 50 GB ou menos.
Como funciona
Esta seção descreve tempdb a governança de recursos de espaço em detalhes.
À medida que as páginas de dados em
tempdbsão alocadas e desalocadas, o Resource Governor mantém o controle do espaçotempdbconsumido por cada grupo de carga de trabalho.Se o administrador de recursos estiver habilitado e um
tempdblimite de consumo de espaço for definido para um grupo de carga de trabalho e uma solicitação (uma consulta) em execução no grupo de carga de trabalho tentar colocar o consumo totaltempdbde espaço pelo grupo acima do limite, a solicitação será anulada com o erro 1138, severidade 17:Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'".Quando uma solicitação é anulada com o erro 1138, o valor na coluna
total_tempdb_data_limit_violation_countde exibição de gerenciamento dinâmico (DMV) sys.dm_resource_governor_workload_groups é incrementado em um e o evento estendidotempdb_data_workload_group_limit_reachedé acionado.O Resource Governor monitora todo o uso
tempdbque pode ser atribuído a um grupo de carga de trabalho, incluindo tabelas temporárias, variáveis (inclusive variáveis de tabela), parâmetros com valor de tabela, tabelas não temporárias, cursores e o usotempdbdurante o processamento de consultas, como spools, spills, tabelas de trabalho e arquivos de trabalho.O consumo de espaço para tabelas temporárias globais e tabelas não temporárias
tempdbé contabilizado no grupo de carga de trabalho que insere a primeira linha na tabela, mesmo que sessões em outros grupos de carga de trabalho adicionem, modifiquem ou removam linhas na mesma tabela.Os limites de consumo configurados
tempdbpara cada grupo de carga de trabalho são expostos na exibição de catálogo sys.resource_governor_workload_groups, nas colunasgroup_max_tempdb_data_mbegroup_max_tempdb_data_percent.O consumo atual e o consumo máximo de espaço
tempdbpor um grupo de carga de trabalho são expostos na DMV sys.dm_resource_governor_workload_groups, nas colunastempdb_data_space_kbepeak_tempdb_data_space_kb, respectivamente.Dica
tempdb_data_space_kbepeak_tempdb_data_space_kbcolunas em sys.dm_resource_governor_workload_groups são mantidas mesmo que nenhum limite detempdbconsumo de espaço seja definido.Você pode criar a função de classificador e os grupos de carga de trabalho sem definir limites inicialmente. Monitore
tempdbo uso por cada grupo ao longo do tempo para estabelecer padrões de uso representativos e, em seguida, defina os limites conforme necessário.tempdbo uso pelos repositórios de versão, incluindo o repositório de versão persistente (PVS) quando recuperação acelerada de banco de dados (ADR) está habilitada dentro detempdb, não é controlado porque as versões de linha podem ser usadas por solicitações em vários grupos de carga de trabalho.O consumo de espaço em
tempdbé contabilizado como o número de páginas de dados de 8 KB usadas. Mesmo que uma página não esteja totalmente cheia de dados, ela adiciona 8 KB aotempdbconsumo de um grupo de carga de trabalho.A contabilização de espaço
tempdbé mantida durante todo o ciclo de vida de um grupo de carga de trabalho. Se um grupo de carga de trabalho for descartado enquanto tabelas temporárias globais ou tabelas não temporárias com os dados atribuídos a esse grupo de carga de trabalho permanecerem emtempdb, o espaço usado por essas tabelas não será contabilizado em nenhum outro grupo de carga de trabalho.tempdbA governança de recursos de espaço controla o espaço emtempdbarquivos de dados, mas não o espaço em disco nos volumes subjacentes. A menos que você aumente previamente os arquivos de dadostempdbpara seus tamanhos pretendidos, o espaço nos volumes ondetempdbestá localizado pode ser consumido por outros arquivos. Se não houver espaço restante paratempdbos arquivos de dados crescerem, poderátempdbficar sem espaço antes que qualquer limite de grupo de carga de trabalho notempdbconsumo de espaço seja atingido.A governança de recursos de espaço em
tempdbé aplicável a arquivos de dados, mas não ao arquivo de log de transações. Para garantir que o log de transações emtempdbnão consuma uma grande quantidade de espaço, habilite o ADR emtempdb.
Diferenças no rastreamento de espaço em nível de sessão
A DMV sys.dm_db_session_space_usage fornece estatísticas de alocação e desalocação de espaço tempdb para cada sessão. Mesmo que haja apenas uma sessão em um grupo de carga de trabalho, as estatísticas de uso de espaço desta DMV podem não corresponder exatamente às estatísticas da exibição sys.dm_resource_governor_workload_groups, pelos seguintes motivos:
- Ao contrário de
sys.dm_resource_governor_workload_groups,sys.dm_db_session_space_usage:- Não reflete o uso de espaço
tempdbpelas tarefas em execução no momento. As estatísticas emsys.dm_db_session_space_usagesão atualizadas quando uma tarefa é concluída. As estatísticas emsys.dm_resource_governor_workload_groupssão atualizadas continuamente. - Não rastreia páginas do mapa de alocação de índice (IAM). Para obter mais informações, consulte o guia de arquitetura de página e extensão.
- Não reflete o uso de espaço
- Depois que as linhas são excluídas ou quando uma tabela, índice ou partição é descartada ou truncada, o mecanismo de banco de dados desaloca as páginas de dados. A desalocação pode ser síncrona ou realizada por um processo assíncrono em segundo plano.
sys.dm_resource_governor_workload_groupsreflete essas desalocações de página à medida que ocorrem, mesmo que a sessão que causou essas desalocações tenha sido fechada e não esteja mais presente emsys.dm_db_session_space_usage.
Melhores práticas para o gerenciamento de recursos de espaço do tempdb
Antes de configurar a governança de tempdb recursos de espaço, considere as seguintes práticas recomendadas:
Revise as melhores práticas gerais para o controlador de recursos.
Para a maioria dos cenários, evite definir o
tempdblimite de consumo de espaço como um valor pequeno ou zero, especialmente para o grupo dedefaultcarga de trabalho. Se você definir esse limite como um valor pequeno ou zero, muitas tarefas comuns poderão começar a falhar se precisarem alocar espaço.tempdbPor exemplo, se você definir o limite fixo ou de porcentagem como 0 para odefaultgrupo de carga de trabalho, talvez não seja possível abrir o Pesquisador de Objetos no SSMS (SQL Server Management Studio).A menos que você crie grupos de carga de trabalho personalizados e uma função classificadora que direcione as cargas de trabalho para seus grupos dedicados, evite limitar o uso do grupo de carga de trabalho
tempdbdefault. Se você limitartempdbo consumo de espaço pelo grupo de carga de trabalho, asdefaultconsultas poderão retornar o erro 1138. Esse erro ocorre quandotempdbainda tem espaço não utilizado que não pode ser consumido por nenhuma carga de trabalho do usuário.A soma dos valores de
GROUP_MAX_TEMPDB_DATA_MBde todos os grupos de cargas de trabalho pode exceder o tamanho máximo detempdb. Por exemplo, se o tamanho máximotempdbfor de 100 GB, os limites para oGROUP_MAX_TEMPDB_DATA_MBgrupo de carga de trabalho A e o grupo de carga de trabalho B poderão ser de 80 GB cada.Essa abordagem ainda impede que cada grupo de carga de trabalho consuma todo o espaço
tempdbdeixando 20 GB para outros grupos de carga de trabalho. Ao mesmo tempo, você evita anulações de consulta desnecessárias quando o espaço livretempdbainda está disponível porque os grupos de carga de trabalho A e B provavelmente não consumirão uma grande quantidade detempdbespaço ao mesmo tempo.Da mesma forma, a soma dos valores de
GROUP_MAX_TEMPDB_DATA_PERCENTpara todos os grupos de carga de trabalho pode exceder cem por cento. Você pode alocar maistempdbespaço para cada grupo se souber que é improvável que vários grupos causem altotempdbuso ao mesmo tempo.
Exemplos
Exibir a configuração do arquivo de dados tempdb
A consulta a seguir mostra a configuração atual tempdb do arquivo de dados:
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 um determinado arquivo no conjunto de resultados:
- Se a
maxsize_mbcoluna estiverNULL, entãoMAXSIZEseráUNLIMITED. - Quando
filegrowth_mboufilegrowth_percenté zero, entãoFILEGROWTHé zero.
Exibir limites de espaço tempdb efetivos por grupo de carga de trabalho
A consulta a seguir mostra o limite efetivo tempdb de consumo de espaço para cada grupo de carga de trabalho. O limite é retornado em megabytes para configuração de limite fixo ou limite de porcentagem .
Se a group_effective_limit_mb coluna estiver NULL, isso significa um dos seguintes:
- Nem o limite fixo nem percentual está configurado.
- Os requisitos para usar a configuração de limite de porcentagem não são atendidos.
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;
Próxima etapa
Conteúdo relacionado
- Gerenciador de Recursos
- Tutorial : exemplos de configuração do administrador de recursos e práticas recomendadas
- 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)