Isolamento do grupo de carga de trabalho do Azure Synapse Analytics

Este artigo explica como os grupos de carga de trabalho podem ser usados para configurar o isolamento de carga de trabalho, conter recursos e aplicar regras de tempo de execução para execução de consulta.

Grupos de carga de trabalho

Grupos de carga de trabalho são contêineres para um conjunto de solicitações e são a base de como o gerenciamento de cargas de trabalho, incluindo isolamento de carga de trabalho, é configurado em um sistema. Os grupos de carga de trabalho são criados por meio da sintaxe CREATE WORKLOAD GROUP. Uma configuração simples de gerenciamento de carga de trabalho pode gerenciar cargas de dados e consultas de usuário. Por exemplo, um grupo de carga de trabalho chamado wgDataLoads definirá os aspectos de carga de trabalho dos dados que estão sendo carregados no sistema. Além disso, um grupo de carga de trabalho chamado wgUserQueries definirá os aspectos de carga de trabalho dos usuários que executam consultas para ler dados do sistema.

As seções a seguir destacarão como os grupos de carga de trabalho permitem definir o isolamento e contenção, solicitar definição de recursos e obedecer às regras de execução.

Governança de recursos

Os grupos de carga de trabalho regem a memória e os recursos de CPU. A E/S de disco e de rede, bem como tempdb, não são governadas. A governança de recursos para memória e CPU é a seguinte:

A memória é regida no nível da solicitação e mantida durante toda a duração da solicitação. Confira Definição de recursos por solicitação para obter mais detalhes sobre como configurar a quantidade de memória por solicitação. O parâmetro MIN_PERCENTAGE_RESOURCE para o grupo de carga de trabalho dedica a memória a esse grupo de carga de trabalho exclusivamente. O parâmetro CAP_PERCENTAGE_RESOURCE para o grupo de carga de trabalho é um limite rígido na memória que um grupo de carga de trabalho pode consumir.

Os recursos de CPU são governados no nível do grupo de carga de trabalho e compartilhados por todas as solicitações em um grupo de carga de trabalho. Os recursos de CPU são fluidos em comparação à memória que é dedicada a uma solicitação durante a execução. A CPU fornecida é um recurso fluido, os recursos de CPU não utilizados podem ser consumidos por todos os grupos de carga de trabalho. Isso significa que a utilização da CPU pode exceder o parâmetro CAP_PERCENTAGE_RESOURCE para o grupo de carga de trabalho. Isso também significa que o parâmetro MIN_PERCENTAGE_RESOURCE para o grupo de carga de trabalho não é uma reserva física, como a memória. Quando os recursos de CPU estiverem sob contenção, a utilização será alinhada à definição de CAP_PERCENTAGE_RESOURCE para grupos de carga de trabalho.

Isolamento de carga de trabalho

O isolamento da carga de trabalho significa que os recursos são reservados, exclusivamente, para um grupo de carga de trabalho. O isolamento da carga de trabalho é obtido pela configuração do parâmetro MIN_PERCENTAGE_RESOURCE como maior que zero na sintaxe CREATE WORKLOAD GROUP. Para cargas de trabalho de execução contínua que precisem aderir a SLAs rígidos, o isolamento faz com que os recursos estejam sempre disponíveis para o grupo de carga de trabalho.

Configurar o isolamento de carga de trabalho define um nível garantido de simultaneidade implicitamente. Por exemplo, um grupo de carga de trabalho com um MIN_PERCENTAGE_RESOURCE definido como 30% e REQUEST_MIN_RESOURCE_GRANT_PERCENT definido como 2% é garantido como 15 simultaneidade. O nível de simultaneidade é garantido porque 15-2% slots de recursos são reservados no grupo de carga de trabalho a qualquer hora (independentemente de como REQUEST_MAX_RESOURCE_GRANT_PERCENT estiver configurado). Se REQUEST_MAX_RESOURCE_GRANT_PERCENT for maior que REQUEST_MIN_RESOURCE_GRANT_PERCENT e CAP_PERCENTAGE_RESOURCE for maior do que MIN_PERCENTAGE_RESOURCE recursos adicionais poderão ser adicionados por solicitação (com base na disponibilidade de recursos). Se REQUEST_MAX_RESOURCE_GRANT_PERCENT e REQUEST_MIN_RESOURCE_GRANT_PERCENT forem iguais e CAP_PERCENTAGE_RESOURCE for maior que MIN_PERCENTAGE_RESOURCE, a simultaneidade adicional será possível. Considere o método abaixo para determinar a simultaneidade garantida:

[Simultaneidade garantida] = [MIN_PERCENTAGE_RESOURCE]/[REQUEST_MIN_RESOURCE_GRANT_PERCENT]

Observação

Existem valores mínimos específicos de nível de serviço específicos para min_percentage_resource. Para obter mais informações e detalhes, confira Valores efetivos.

Na ausência de isolamento de carga de trabalho, as solicitações operam no pool compartilhado de recursos. O acesso aos recursos no pool compartilhado não é garantido e é atribuído de acordo com a importância.

A configuração do isolamento de carga de trabalho deve ser feita com cautela, pois os recursos são alocados para o grupo de carga de trabalho mesmo que não haja nenhuma solicitação ativa nele. O excesso de configuração do isolamento pode levar à redução geral da utilização do sistema.

Os usuários devem evitar uma solução de gerenciamento de carga de trabalho que configure 100% de isolamento de carga de trabalho: 100% de isolamento é obtido quando a soma de min_percentage_resource configurada em todos os grupos de cargas de trabalho é igual a 100%. Esse tipo de configuração é excessivamente restritivo e rígido, deixando pouco espaço para solicitações de recursos que sejam classificadas incorretamente por acidente. Há uma provisão que permite que uma solicitação seja executada em grupos de carga de trabalho não configurados para isolamento. Os recursos alocados a essa solicitação aparecerão como zero nos DMVs dos sistemas e pegarão emprestado um pouco da concessão de recurso dos recursos reservados ao sistema.

Observação

Para garantir a melhor utilização de recursos, pense em uma solução de gerenciamento de carga de trabalho que aproveite algum isolamento para fazer com que os SLAs sejam atendidos e misturados com recursos compartilhados que são acessados de acordo com a importância da carga de trabalho .

Contenção da carga de trabalho

A contenção da carga de trabalho refere-se à limitação da quantidade de recursos que um grupo de carga de trabalho pode consumir. A contenção da carga de trabalho é obtida pela configuração do parâmetro CAP_PERCENTAGE_RESOURCE para menos de 100 na sintaxe CREATE WORKLOAD GROUP. Considere o cenário no qual os usuários precisam de acesso de leitura ao sistema para que possam executar uma análise hipotética por meio de consultas ad hoc. Esses tipos de solicitações podem ter um impacto negativo em outras cargas de trabalho em execução no sistema. A configuração da contenção garante a limitação da quantidade de recursos.

Configurar a contenção de carga de trabalho define implicitamente um nível máximo de simultaneidade. Com um CAP_PERCENTAGE_RESOURCE definido como 60% e um REQUEST_MIN_RESOURCE_GRANT_PERCENT definido como 1%, é permitido um nível de simultaneidade de até 60 para o grupo de cargas de trabalho. Considere o método incluído abaixo para determinar a simultaneidade máxima:

[Simultaneidade máxima] = [CAP_PERCENTAGE_RESOURCE]/[REQUEST_MIN_RESOURCE_GRANT_PERCENT]

Observação

O CAP_PERCENTAGE_RESOURCE efetivo de um grupo de carga de trabalho não alcançará 100% quando forem criados grupos de carga de trabalho com MIN_PERCENTAGE_RESOURCE em um nível maior que zero. Consulte sys.dm_workload_management_workload_groups_stats para obter os valores de tempo de execução efetivos.

Recursos por definição de solicitação

Os grupos de carga de trabalho fornecem um mecanismo para definir a quantidade mínima e máxima de recursos alocados por solicitação com os parâmetros REQUEST_MIN_RESOURCE_GRANT_PERCENT e REQUEST_MAX_RESOURCE_GRANT_PERCENT na sintaxe CREATE WORKLOAD GROUP. O recurso, nesse caso, é a memória. A governança de recursos de CPU é abordada na seção Governança de recursos.

Observação

REQUEST_MAX_RESOURCE_GRANT_PERCENT é um parâmetro opcional que usa como padrão o mesmo valor especificado para REQUEST_MIN_RESOURCE_GRANT_PERCENT.

Assim como ocorre na escolha de uma classe de recurso, a configuração de REQUEST_MIN_RESOURCE_GRANT_PERCENT define o valor dos recursos utilizados por uma solicitação. A quantidade de recursos indicados pelo valor definido é garantida à solicitação para alocação antes do início da execução. Para clientes que estão migrando de classes de recursos para grupos de carga de trabalho, considere seguir o artigo de Tutorial para fazer o mapeamento de classes de recursos para grupos de carga de trabalho como ponto de partida.

A configuração de REQUEST_MAX_RESOURCE_GRANT_PERCENT com um valor maior que REQUEST_MIN_RESOURCE_GRANT_PERCENT permite que o sistema aloque mais recursos por solicitação. Durante o agendamento de uma solicitação, o sistema determina a alocação de recursos real para a solicitação, que fica entre REQUEST_MIN_RESOURCE_GRANT_PERCENT e REQUEST_MAX_RESOURCE_GRANT_PERCENT, com base na disponibilidade dos recursos no pool compartilhado e na carga atual no sistema. Os recursos devem existir no pool compartilhado de recursos quando a consulta é agendada.

Observação

REQUEST_MIN_RESOURCE_GRANT_PERCENT e REQUEST_MAX_RESOURCE_GRANT_PERCENT têm valores efetivos que dependem dos valores efetivos de MIN_PERCENTAGE_RESOURCE e CAP_PERCENTAGE_RESOURCE. Consulte sys.dm_workload_management_workload_groups_stats para obter os valores de tempo de execução efetivos.

Regras de execução

Em sistemas de relatórios ad hoc, os clientes podem executar acidentalmente consultas sem controle que afetam seriamente a produtividade de outras. Os administradores do sistema são forçados a gastar tempo eliminando as consultas sem controle para liberar recursos do sistema. Os grupos de cargas de trabalho oferecem a capacidade de configurar uma regra de tempo limite de execução de consulta para cancelar consultas que excederam o valor especificado. A regra é configurada pela definição do parâmetro QUERY_EXECUTION_TIMEOUT_SEC na sintaxe CREATE WORKLOAD GROUP.

Recursos do pool compartilhado

Os recursos do pool compartilhado são os recursos não configurados para isolamento. Os grupos de cargas de trabalho com MIN_PERCENTAGE_RESOURCE definido como zero aproveitam os recursos no pool compartilhado para executar solicitações. Os grupos de cargas de trabalho com um CAP_PERCENTAGE_RESOURCE maior que MIN_PERCENTAGE_RESOURCE também usam recursos compartilhados. A quantidade de recursos disponíveis no pool compartilhado é calculada da maneira indicada abaixo.

[Pool compartilhado] = 100 - [soma de MIN_PERCENTAGE_RESOURCE em todos os grupos de carga de trabalho]

O acesso aos recursos no pool compartilhado é alocado de acordo com a importância. As solicitações com o mesmo nível de importância acessarão os recursos do pool compartilhado com base em “primeiro a entrar, primeiro a sair”.

Próximas etapas