Partilhar via


Governança de recursos espaciais Tempdb

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 resource governor para impor um limite ao espaço tempdb total consumido por um grupo de workload. Um grupo de carga de trabalho pode ser associado a um aplicativo, um usuário, um grupo de usuários, etc. 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 foi imposto.

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 você é novo no administrador de recursos no SQL Server, consulte administrador de recursos para saber mais sobre seus conceitos e recursos.

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_MB argumento.

    O limite fixo é útil quando os requisitos de uso da carga de trabalho tempdb são conhecidos com antecedência ou quando tempdb o tamanho não muda.

  • Defina um limite percentual usando o GROUP_MAX_TEMPDB_DATA_PERCENT argumento.

    O limite percentual é útil quando você pode alterar o tamanho máximo ao longo do tempo e deseja que o espaço disponível para cada grupo de carga de trabalho seja alterado proporcionalmente sem reconfigurar o tempdb administrador de tempdb recursos. Por exemplo, se você dimensionar uma VM do Azure executando o SQL Server e aumentar o tamanho máximo tempdb , o tempdb espaço disponível para cada grupo de carga de trabalho com um limite de porcentagem 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 os limites fixo e percentual forem especificados para o mesmo grupo de carga de trabalho, o limite fixo terá precedência 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.

Configuração do limite percentual

Os limites de porcentagem estão em vigor somente quando a configuração do tempdb arquivo de dados atende aos requisitos resumidos na tabela a seguir:

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 arquivos 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 arquivos de dados são pré-cultivados para os 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

A consulta a seguir permite ver 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_mb coluna for NULL, então MAXSIZE é UNLIMITED.
  • Quando ou filegrowth_mb ou filegrowth_percent é zero, então FILEGROWTH é zero.

Se você definir GROUP_MAX_TEMPDB_DATA_PERCENT e executar a instrução ALTER RESOURCE GOVERNOR 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 não serão impostos. Nesse caso, você recebe a mensagem de aviso 10989, gravidade 10 GROUP_MAX_TEMPDB_DATA_PERCENT não está em vigor porque os requisitos de configuração tempdb não são atendidos. A mensagem também é registrada no log de erros.

Para tornar os limites de porcentagem efetivos, reconfigure tempdb os arquivos de dados para atender aos requisitos e execute ALTER RESOURCE GOVERNOR RECONFIGURE novamente. Para obter mais informações sobre como configurar SIZE, FILEGROWTH e MAXSIZE, consulte ALTER DATABASE Opções de Arquivo e Grupo de Arquivos.

Observação

Para uma nova instância do SQL Server, o arquivo MAXSIZE de dados é UNLIMITED e FILEGROWTH é maior que zero, o que significa que os limites de porcentagem não são eficazes. Para usar limites percentuais, você deve:

  • Prepare tempdb os arquivos de dados para os tamanhos definidos e defina FILEGROWTH como zero.
  • Defina o MAXSIZE de cada arquivo de dados para um valor limitado.
    • Para cada tempdb volume de arquivo de dados, verifique se a soma dos valores dos MAXSIZE arquivos 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 dois tempdb arquivos de dados, o tamanho de cada arquivo deve ser 50 GB ou menos.

Se um limite de porcentagem estiver em vigor e você adicionar, remover ou redimensionar tempdb arquivos de dados, deverá executar ALTER RESOURCE GOVERNOR RECONFIGURE para atualizar o administrador de recursos com o novo tamanho máximo de tempdb (100%).

Como funciona

Esta secção descreve tempdb em pormenor a governação dos recursos espaciais.

  • À medida que as páginas de dados são tempdb alocadas e desalocadas, o tempdb controlador de recursos mantém a contabilidade do espaço consumido por cada grupo de carga de trabalho.

    Se o administrador de recursos estiver habilitado e um limite de consumo de tempdb 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 trazer o consumo total tempdb de espaço pelo grupo acima do limite, a solicitação será abortada com o erro 1138, gravidade 17, Não foi possível alocar uma nova página para o banco de dados 'tempdb' porque isso excederia o limite definido para o grupo de carga de trabalho 'nome do grupo de carga de trabalho'.

    Quando uma solicitação é abortada com o erro 1138, o valor na total_tempdb_data_limit_violation_count coluna do sys.dm_resource_governor_workload_groups modo de exibição de gerenciamento dinâmico (DMV) é incrementado em um e o tempdb_data_workload_group_limit_reached evento estendido é acionado.

  • O administrador de recursos monitoriza toda a utilização tempdb que 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 e tempdb utilizaçã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 tempdb 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 tempdb para cada grupo de carga de trabalho são expostos na vista de catálogo sys.resource_governor_workload_groups, nas colunas group_max_tempdb_data_mb e group_max_tempdb_data_percent.

    O consumo atual e o consumo máximo de espaço de tempdb por um grupo de carga de trabalho são apresentados na visão sys.dm_resource_governor_workload_groups do DMV, nas colunas tempdb_data_space_kb e peak_tempdb_data_space_kb, respetivamente.

    Sugestão

    tempdb_data_space_kb e peak_tempdb_data_space_kb as colunas em sys.dm_resource_governor_workload_groups são mantidas mesmo que não existam limites definidos para o consumo de tempdb espaço.

    Você pode criar a função do classificador e os grupos de carga de trabalho sem definir limites inicialmente. Monitore tempdb o uso por cada grupo ao longo do tempo para estabelecer padrões de uso representativos e, em seguida, defina limites conforme necessário.

  • Tempdb o 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 no tempdb, 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 ao tempdb consumo por um grupo de carga de trabalho.

  • Tempdb A 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 no tempdb, o espaço usado por essas tabelas não será contabilizado em nenhum outro grupo de carga de trabalho.

  • Tempdb A governança de recursos espaciais controla o espaço nos tempdb arquivos de dados, mas não o espaço em disco nos volumes subjacentes. A menos que prepare previamente os arquivos de dados tempdb para os tamanhos pretendidos, o espaço no(s) volume(s) onde tempdb está localizado pode ser consumido por outros arquivos. Se não houver espaço restante para tempdb os arquivos de dados crescerem, poderá tempdb ficar sem espaço antes que qualquer limite de consumo de espaço do tempdb grupo de carga de trabalho seja atingido.

  • Governança de recursos espaciais em tempdb aplica-se a ficheiros de dados, mas não ao ficheiro de registo de transações. Para garantir que o login tempdb da transação não consuma uma grande quantidade de espaço, habilite o ADR no tempdb.

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 em um grupo de carga de trabalho, as estatísticas de uso de espaço fornecidas por este Detran podem não corresponder exatamente às estatísticas fornecidas na visualizaçã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 tempdb o uso de espaço pelas tarefas em execução no momento. As estatísticas em sys.dm_db_session_space_usage são atualizadas quando uma tarefa é concluída. As estatísticas são sys.dm_resource_governor_workload_groups atualizadas continuamente.
    • Não rastreia páginas do mapa de alocação de índice (IAM). Para obter mais informações, consulte Guia de arquitetura de páginas e extensões.
  • Depois que as linhas são excluídas, ou quando uma tabela, índice ou partição é descartada ou truncada, as páginas de dados podem ser deslocadas por um processo assíncrono em segundo plano. Pode haver um atraso na desalocação desta página. sys.dm_resource_governor_workload_groups reflete 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 no sys.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 tempdb consumo de espaço para um valor pequeno ou zero, especialmente para o default grupo de carga de trabalho. Se você fizer isso, muitas tarefas comuns podem começar a falhar se precisarem alocar espaço no tempdb. 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 o default Pesquisador de Objetos no SQL Server Management Studio (SSMS).

  • A menos que tenha criado grupos de carga de trabalho personalizados e uma função de classificador que coloque cargas de trabalho nos seus grupos dedicados, evite limitar o uso de tempdb pelo grupo de carga de trabalho default. Isso pode cancelar consultas com o erro 1138 quando tempdb ainda possui espaço não utilizado que não pode ser aproveitado por qualquer carga de trabalho do utilizador.

  • É permitido que a soma dos valores para todos os grupos de GROUP_MAX_TEMPDB_DATA_MB carga de trabalho exceda o tamanho máximo tempdb . Por exemplo, se o tamanho máximo tempdb for 100 GB, os limites para o grupo de carga de trabalho GROUP_MAX_TEMPDB_DATA_MB e 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 livre tempdb ainda está disponível, porque os grupos de carga de trabalho A e B provavelmente não consumirão uma grande quantidade de tempdb espaço ao mesmo tempo.

    Da mesma forma, a soma dos valores para todos os grupos de carga de trabalho GROUP_MAX_TEMPDB_DATA_PERCENT pode exceder 100 por cento. Você pode alocar mais tempdb espaço para cada grupo se souber que é improvável que vários grupos causem alto tempdb uso ao mesmo tempo.