Controlar recursos do SQL Server

Concluído

Enquanto alguns SQL Servers ou instâncias gerenciadas SQL do Azure oferecem suporte apenas aos bancos de dados de um aplicativo (essa configuração é comumente vista em aplicativos de missão crítica), muitos servidores oferecem suporte a bancos de dados para vários aplicativos com diferentes requisitos de desempenho e diferentes ciclos de pico de carga de trabalho. Equilibrar esses diferentes requisitos pode ser um desafio para o administrador. Uma das maneiras de equilibrar os recursos do servidor é usar o Administrador de Recursos, que foi introduzido no SQL Server 2008.

O Administrador de Recursos é um recurso do SQL Server e da instância gerenciada SQL do Azure que permite controlar granularmente a quantidade de recursos de CPU, E/S física e memória que podem ser usados por uma solicitação de entrada de um aplicativo. O Administrador de Recursos é habilitado no nível da instância e permite definir como as conexões são tratadas usando uma função de classificador, que subdivide as sessões em grupo de carga de trabalho. Cada grupo de carga de trabalho é configurado para usar um pool específico de recursos do sistema.

Conjuntos de recursos

Um pool de recursos representa os recursos físicos disponíveis no servidor. O SQL Server sempre tem dois pools, padrão e interno, mesmo quando o Administrador de Recursos não está habilitado. O pool interno é usado por funções críticas do SQL Server e não pode ser restrito. O pool padrão e quaisquer pools de recursos definidos explicitamente podem ser configurados com limites para os recursos que ele pode usar. Você pode especificar os seguintes limites para cada pool não interno:

  • Percentagem mínima / máxima de CPU

  • Limite da percentagem de CPU

  • Percentagem de memória mínima/máxima

  • Afinidade do nó NUMA

  • IOPs mínimas/máximas por volume

Nota

As alterações em um pool afetam apenas as novas sessões, não as existentes. Uma alteração em um pool não ajudará você a restringir os recursos de um processo de longa execução. A exceção são os pools externos usados em conjunto com os Serviços de Aprendizado de Máquina do SQL Server, que são externos ao SQL Server e podem ser limitados por uma alteração de pool.

Com exceção da porcentagem mínima ou máxima da CPU, todas as outras configurações do pool de recursos representam limites rígidos e não podem ser excedidas. A porcentagem mínima / máxima da CPU só será aplicada quando houver contenção de CPU. Por exemplo, se você tiver um máximo de 70%, se houver ciclos de CPU disponíveis, a carga de trabalho poderá usar até 100%. Se houver outras cargas de trabalho em execução, a carga de trabalho será restrita a 70%.

Grupo de carga de trabalho

Um grupo de carga de trabalho é um contêiner para solicitações de sessão com base em sua classificação pela função de classificador. Como os pools de recursos, há dois grupos internos, padrão e interno, e cada grupo de carga de trabalho só pode pertencer a um pool de recursos. No entanto, um pool de recursos pode hospedar vários grupos de carga de trabalho. Todas as conexões vão para o grupo de carga de trabalho padrão, a menos que sejam passadas para outro grupo definido pelo usuário pela função de classificador. E, por padrão, o grupo de carga de trabalho padrão usa os recursos atribuídos ao pool de recursos padrão.

Função de classificador

A função de classificador é executada no momento em que uma conexão é estabelecida com a instância do SQL Server e classifica cada conexão em um determinado grupo de carga de trabalho. Se a função retornar um NULL, padrão ou o nome do grupo de carga de trabalho inexistente, a sessão será transferida para o grupo de carga de trabalho padrão. Como o classificador é executado em todas as conexões, ele deve ser testado quanto à eficiência. A imagem a seguir mostra uma função de classificador de exemplo que classifica os usuários com base em seu nome de usuário.

CREATE FUNCTION dbo.RGClassifier()

RETURNS SYSNAME

WITH SCHEMABINDING

AS

BEGIN

DECLARE @WorkloadGroup AS SYSNAME

IF(SUSER_NAME() = 'ReportUser')

SET @WorkloadGroup = 'ReportServerGroup'

ELSE IF (SUSER_NAME() = 'PrimaryUser')

SET @WorkloadGroup = 'PrimaryServerGroup'

ELSE

SET @WorkloadGroup = 'default'

RETURN @WorkloadGroup

END

Você pode aumentar a complexidade da definição de função mostrada no exemplo, mas deve verificar se a função mais complexa não afeta o desempenho de login do usuário.

Casos de uso do Administrador de Recursos

O Administrador de Recursos é usado principalmente em cenários multilocatários em que um grupo de bancos de dados compartilha uma única instância do SQL Server e o desempenho precisa ser mantido consistente para todos os usuários do servidor. Você também pode usar o Administrador de Recursos para limitar os recursos usados por operações de manutenção, como verificações de consistência e reconstruções de índice, para tentar garantir recursos suficientes para consultas do usuário durante as janelas de manutenção.