Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x) e versões posteriores
Ao habilitar tempdb a governança de recursos espaciais, você melhora a confiabilidade e evita interrupções, evitando que consultas ou cargas de trabalho descontroladas consumam uma grande quantidade de espaço no tempdb.
A partir do SQL Server 2025 (17.x), pode usar o governador de recursos para impor um limite ao espaço tempdb total consumido por um grupo de carga de trabalho. Quando uma solicitação (uma consulta) tenta ultrapassar o limite, o Resource Governor aborta-a com um erro específico a indicar que foi imposto o limite do grupo de carga de trabalho.
Na verdade, você pode particionar o espaço compartilhado tempdb entre diferentes cargas de trabalho. Por exemplo, você pode definir um limite mais alto para um grupo de carga de trabalho usado por um aplicativo de missão crítica e definir um limite inferior 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 diferentes tempdb limites de espaço para diferentes aplicativos, usuários, grupos de usuários, etc. Você também pode definir limites com base na lógica personalizada.
Se é novo no governador de recursos no SQL Server, consulte governador de recursos para aprender sobre os seus conceitos e capacidades.
Para obter um passo a passo e práticas recomendadas de configuração do administrador de recursos, consulte Tutorial: Exemplos de configuração e práticas recomendadas do administrador de recursos.
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 previamente os requisitos de utilização da carga
tempdbde trabalho ou quando otempdbtamanho não mudar.Defina um limite percentual usando o
GROUP_MAX_TEMPDB_DATA_PERCENTargumento.Usa o limite percentual quando podes alterar o tamanho máximo de
tempdbao longo do tempo e queres que otempdbespaço disponível para cada grupo de carga de trabalho mude proporcionalmente sem alterar a configuração dos grupos. Por exemplo, se você dimensionar uma VM do Azure executando o SQL Server e aumentar o tamanho máximotempdb, otempdbespaço disponível para cada grupo de carga de trabalho com um limite de porcentagem também aumentará.
Para 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 especificar ambos os limites fixos e percentuais para o mesmo grupo de carga de trabalho, o limite fixo tem prioridade sobre o 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 sem limites de tempdb consumo de espaço. Para visualizar limites efetivos, consulte o exemplo de Visualizar limites de espaço tempdb efetivo por grupo de carga de trabalho .
Configuração do limite percentual
Quando executa a ALTER RESOURCE GOVERNOR RECONFIGURE declaração, os limites percentuais entram em vigor de acordo com a tabela seguinte:
| Configuração | Descrição | Tamanho máximo do Tempdb (100%) | Limite percentual em vigor |
|---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB não está definido- Para todos os ficheiros de dados, MAXSIZE não é UNLIMITED- Para todos os ficheiros de dados, FILEGROWTH não é zero |
tempdb Os arquivos de dados podem crescer automaticamente até seu 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 ficheiros de dados, MAXSIZE é UNLIMITED- Para todos os arquivos de dados, FILEGROWTH é zero |
tempdb Os ficheiros de dados estão pré-crescidos até ao tamanho pretendido e não podem crescer mais |
A soma dos valores de SIZE para todos os arquivos de dados |
Sim |
| Todas as outras configurações | Não |
Para ver a configuração tempdb, consulte o exemplo Ver a configuração do ficheiro de dados tempdb.
Ao utilizar limites percentuais, considere o seguinte:
Se definires
GROUP_MAX_TEMPDB_DATA_PERCENTe executares a instrução ALTER RESOURCE GOVERNOR RECONFIGURE, mas a configuração do ficheiro de dados não satisfizer os requisitos, a instrução é concluída com sucesso e os limites em percentagem são armazenados, mas não são impostos. Neste caso, recebe a mensagem de aviso 10989, gravidade 10, que também está registada no registo de erros:GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Para tornar os limites de porcentagem efetivos, reconfigure
tempdbos arquivos de dados para atender aos requisitos e executeALTER RESOURCE GOVERNOR RECONFIGUREnovamente. Para mais informações sobre como configurarSIZE,FILEGROWTHeMAXSIZE, consulte ALTER DATABASE Opções de Ficheiro e de Grupo de Ficheiros.Se um limite de porcentagem estiver em vigor e você adicionar, remover ou redimensionar
tempdbarquivos de dados, deverá executarALTER RESOURCE GOVERNOR RECONFIGUREpara atualizar o administrador de recursos com o novo tamanho máximo detempdb(100%).
Observação
Para uma nova instância do SQL Server, o ficheiro MAXSIZE de dados é UNLIMITED e FILEGROWTH é maior que zero, o que significa que os limites percentuais não são eficazes. Para usar limites percentuais, você deve:
- Prepare
tempdbos arquivos de dados para os tamanhos definidos e definaFILEGROWTHcomo 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 dosMAXSIZEarquivos 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, o tamanho de cada arquivo deve ser 50 GB ou menos.
Como funciona
Esta secção descreve tempdb em pormenor a governação dos recursos espaciais.
À medida que as páginas de dados são
tempdbalocadas e desalocadas, otempdbcontrolador de recursos mantém a contabilidade do espaço consumido por cada grupo de carga de trabalho.Se o Resource Governor estiver ativado e for definido um limite de consumo de espaço
tempdbpara um grupo de carga de trabalho, e um pedido (uma consulta) em execução no grupo tentar fazer com que o consumo total de espaçotempdbdo grupo ultrapasse esse limite, o pedido é abortado com o erro 1138, gravidade 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 é abortada com o erro 1138, o valor na
total_tempdb_data_limit_violation_countcoluna do sys.dm_resource_governor_workload_groups modo de exibição de gerenciamento dinâmico (DMV) é incrementado em um e otempdb_data_workload_group_limit_reachedevento estendido é acionado.O administrador de recursos monitoriza toda a utilização
tempdbque pode ser atribuída a um grupo de trabalho, incluindo tabelas temporárias, variáveis (incluindo variáveis de tabela), parâmetros com valor de tabela, tabelas não temporárias, cursores etempdbutilização no processamento de consultas, como spools, transbordos, tabelas de trabalho e arquivos de trabalho.O consumo de espaço para tabelas temporárias globais e tabelas não temporárias é contabilizado no
tempdbgrupo 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 vista 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 de
tempdbpor um grupo de carga de trabalho são apresentados na visão sys.dm_resource_governor_workload_groups do DMV, nas colunastempdb_data_space_kbepeak_tempdb_data_space_kb, respetivamente.Sugestão
tempdb_data_space_kbepeak_tempdb_data_space_kbas colunas em sys.dm_resource_governor_workload_groups são mantidas mesmo que não existam limites definidos para o consumo detempdbespaço.Você pode criar a função do 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 limites conforme necessário.tempdbo uso pelos repositórios de versão, incluindo o armazenamento de versão persistente (PVS) quando a recuperação acelerada de banco de dados (ADR) está habilitada notempdb, 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 seja totalmente preenchida com dados, ela adiciona 8 KB aotempdbconsumo por um grupo de carga de trabalho.tempdbA contabilidade de espaço é mantida durante o tempo de vida de um grupo 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 contabilizados para esse grupo de carga de trabalho permanecerem notempdb, o espaço usado por essas tabelas não será contabilizado em nenhum outro grupo de carga de trabalho.tempdbA governança de recursos espaciais controla o espaço nostempdbarquivos de dados, mas não o espaço em disco nos volumes subjacentes. A menos que aumente previamente os ficheiros de dadostempdbaté ao tamanho pretendido, o espaço nos volumes onde se encontratempdbpode ser ocupado por outros ficheiros. Se não houver espaço restante paratempdbos arquivos de dados crescerem, poderátempdbficar sem espaço antes que qualquer limite de consumo de espaço dotempdbgrupo de carga de trabalho seja atingido.Governança de recursos espaciais em
tempdbaplica-se a ficheiros de dados, mas não ao ficheiro de registo de transações. Para garantir que o logintempdbda transação não consuma uma grande quantidade de espaço, habilite o ADR notempdb.
Diferenças com o rastreamento de espaço no nível da sessão
O sys.dm_db_session_space_usage DMV fornece estatísticas de alocação e desalocação de espaço para cada sessão. Mesmo que haja apenas uma sessão num grupo de carga de trabalho, as estatísticas de utilização de espaço deste DMV podem não corresponder exatamente às estatísticas da sys.dm_resource_governor_workload_groups perspetiva, pelas seguintes razões:
- Ao contrário de
sys.dm_resource_governor_workload_groups,sys.dm_db_session_space_usage:- Não reflete
tempdbo uso de espaço pelas 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 sãosys.dm_resource_governor_workload_groupsatualizadas continuamente. - Não rastreia páginas do mapa de alocação de índice (IAM). Para mais informações, consulte o guia de arquitetura de páginas e extensões.
- Não reflete
- Após a eliminação das linhas, ou quando uma tabela, índice ou partição é eliminada ou truncada, o motor da base 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áginas à medida que ocorrem, mesmo que a sessão que causou essas desalocações tenha sido fechada e não esteja mais presente nosys.dm_db_session_space_usage.
Práticas recomendadas para a governança de recursos de espaço do tempdb
Antes de configurar tempdb a governança de recursos espaciais, considere as seguintes práticas recomendadas:
Analise as práticas recomendadas gerais para o administrador de recursos.
Para a maioria dos cenários, evite definir o limite de
tempdbconsumo de espaço para um valor pequeno ou zero, especialmente para odefaultgrupo de carga de trabalho. Se definir este limite para um valor pequeno ou zero, muitas tarefas comuns podem começar a falhar se precisarem de alocar espaço emtempdb. Por exemplo, se você definir o limite fixo ou percentual como 0 para o grupo de carga de trabalho, talvez não seja possível abrir odefaultPesquisador de Objetos no SQL Server Management Studio (SSMS).A menos que cries grupos de carga de trabalho personalizados e uma função de classificação que coloque as cargas de trabalho nos respetivos grupos dedicados, evita limitar a utilização do grupo de carga de trabalho
tempdbdefault. Se limitartempdbo consumo de espaço pelodefaultgrupo de carga de trabalho, as consultas podem devolver o erro 1138. Este erro ocorre quandotempdbainda há espaço não utilizado que não pode ser consumido por nenhuma carga de trabalho do utilizador.A soma dos
GROUP_MAX_TEMPDB_DATA_MBvalores para todos os grupos de carga de trabalho pode exceder o tamanho máximotempdb. Por exemplo, se o tamanho máximotempdbfor 100 GB, os limites para o grupo de carga de trabalhoGROUP_MAX_TEMPDB_DATA_MBe o grupo de carga de trabalho B podem ser de 80 GB cada.Essa abordagem ainda impede que cada grupo de carga de trabalho consuma todo o espaço
tempdb, deixando 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 para todos os grupos de carga de trabalho
GROUP_MAX_TEMPDB_DATA_PERCENTpode exceder 100 por cento. Você pode alocar maistempdbespaço para cada grupo se souber que é improvável que vários grupos causem altotempdbuso ao mesmo tempo.
Examples
Ver configuração do ficheiro de dados tempdb
A consulta seguinte mostra a configuração atual tempdb do ficheiro 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 forNULL, entãoMAXSIZEéUNLIMITED. - Quando ou
filegrowth_mboufilegrowth_percenté zero, entãoFILEGROWTHé zero.
Ver limites efetivos de espaço tempdb por grupo de carga de trabalho
A consulta seguinte mostra o limite efetivo tempdb de consumo de espaço para cada grupo de carga de trabalho. O limite é devolvido em megabytes para configuração de limite fixo ou limite percentual .
Se a group_effective_limit_mb coluna for NULL, significa uma das seguintes:
- Nem o limite fixo nem o percentual é definido.
- Os requisitos para usar a configuração do limite percentual não são cumpridos.
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;
Passo seguinte
Conteúdo relacionado
- Administrador 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)