Classificação da carga de trabalho para o pool de SQL dedicado no Azure Synapse Analytics

Este artigo explica o processo de classificação de carga de trabalho de atribuição de um grupo de carga de trabalho e a importância de solicitações de entrada com pools de SQL dedicados no Azure Synapse.

classificação

A classificação de gerenciamento de carga de trabalho permite que as políticas de carga de trabalho sejam aplicadas a solicitações por meio da atribuição de classes de recursos e importância.

Embora haja muitas maneiras de classificar cargas de trabalho do data warehouse, a classificação mais simples e mais comum é a carga e a consulta. Você carrega dados com instruções insert, update e delete. Você consulta os dados usando selects. Uma solução de data warehouse geralmente terá uma política de carga de trabalho para carregar a atividade, como atribuir uma classe de recursos mais alta com mais recursos. Uma política de carga de trabalho diferente pode ser aplicada a consultas, como importância menor em comparação às atividades de carregamento.

Você também pode subclassificar suas cargas de trabalho de carregamento e consulta. A subclasse oferece mais controle sobre suas cargas de trabalho. Por exemplo, as cargas de trabalho de consulta podem consistir em atualizações de cubo, consultas de painel ou consultas ad hoc. Você pode classificar cada uma dessas cargas de trabalho de consulta com diferentes classes de recursos ou configurações de importância. A carga também pode se beneficiar da subclasse. Transformações grandes podem ser atribuídas a classes de recursos maiores. A maior importância pode ser usada para garantir que os principais dados de vendas sejam carregados antes dos dados meteorológicos ou de um feed de dados social.

Nem todas as instruções são classificadas, pois não exigem recursos nem precisam de importância para influenciar a execução. Os comandos DBCC e as instruções BEGIN, COMMIT e ROLLBACK TRANSACTION não são classificados.

Processo de classificação

A classificação do pool SQL dedicado é obtida hoje atribuindo usuários a uma função que tenha uma classe de recurso correspondente atribuída a ele usando sp_addrolemember. A capacidade de caracterizar solicitações além de um logon para uma classe de recurso é limitada a essa capacidade. Um método mais rico para classificação agora está disponível com a sintaxe CREATE WORKLOAD CLASSIFIER. Com essa sintaxe, os usuários do pool de SQL dedicado podem atribuir importância e quantos recursos do sistema são atribuídos a uma solicitação por meio do parâmetro workload_group.

Peso da classificação

Como parte do processo de classificação, o peso está em vigor para determinar qual grupo de carga de trabalho é atribuído. O peso é o seguinte:

Parâmetro do classificador Peso
MEMBERNAME:USER 64
MEMBERNAME:ROLE 32
WLM_LABEL 16
WLM_CONTEXT 8
START_TIME/END_TIME 4

O parâmetro membername é obrigatório. No entanto, se o MemberName especificado for um usuário de banco de dados em vez de uma função de banco de dados, o peso do usuário será maior e, portanto, esse classificador será escolhido.

Se um usuário for um membro de várias funções com classes de recursos diferentes atribuídos ou correspondentes em vários classificadores, o usuário receberá a atribuição de classe de recurso mais alta. Esse comportamento é consistente com o comportamento de atribuição de classe de recurso existente.

Observação

A classificação do comportamento de MIs (identidades gerenciadas) difere entre o pool de SQL dedicado nos workspaces do Azure Synapse e o pool de SQL dedicado autônomo (antigo SQL DW). Enquanto a MI do pool de SQL dedicado autônomo mantém a identidade atribuída, para os workspaces do Azure Synapse o MI é executado como dbo. Isso não pode ser alterado. Por padrão, a função dbo é classificada para smallrc. A criação de um classificador para a função dbo permite atribuir solicitações a um grupo de carga de trabalho diferente de smallrc. Se o dbo sozinho for muito genérico para classificação e tiver impactos mais amplos, considere usar a classificação baseada em rótulo, sessão ou tempo junto com a classificação da função dbo.

Classificadores do sistema

Classificação de carga de trabalho tem classificadores de carga de trabalho do sistema. Os classificadores de sistema mapeiam associações de função de classe de recurso existentes para alocações de recursos de classe de recurso com importância normal. Classificadores de sistema não podem ser descartados. Para exibir classificadores de sistema, você pode executar a consulta abaixo:

SELECT * FROM sys.workload_management_workload_classifiers where classifier_id <= 12

Mesclando atribuições de classe de recurso com classificadores

Classificadores de sistema criados em seu nome fornecem um caminho fácil para migrar para a classificação de carga de trabalho. O uso de mapeamentos de função de classe de recurso com precedência de classificação pode levar a uma classificação incorreta conforme você começa a criar novos classificadores com importância.

Considere o cenário a seguir.

  • Um data warehouse existente tem um usuário de banco de dados DBAUser atribuído à função de classe de recurso largerc. A atribuição de classe de recurso foi feita com sp_addrolemember.
  • O data warehouse agora é atualizado com o gerenciamento de carga de trabalho.
  • Para testar a nova sintaxe de classificação, a função de banco de dados DBARole (da qual DBAUser é membro), tem um classificador criado para que elas sejam mapeadas para mediumrc e alta importância.
  • Quando o DBAUser faz logon e executa uma consulta, a consulta será atribuída a largerc. Porque um usuário tem precedência sobre uma associação de função.

Para simplificar a solução de problemas de classificação indesejada, recomendamos que você remova os mapeamentos de função de classe de recurso ao criar classificadores de carga de trabalho. O código a seguir retorna associações de função de classe de recurso existentes. Execute sp_droprolemember para cada retornado da classe de recurso correspondente.

SELECT  r.name AS [Resource Class]
,       m.name AS membername
FROM    sys.database_role_members rm
JOIN    sys.database_principals AS r ON rm.role_principal_id = r.principal_id
JOIN    sys.database_principals AS m ON rm.member_principal_id = m.principal_id
WHERE   r.name IN ('mediumrc','largerc','xlargerc','staticrc10','staticrc20','staticrc30','staticrc40','staticrc50','staticrc60','staticrc70','staticrc80');
--for each row returned run in the previous query
EXEC sp_droprolemember '[Resource Class]', membername;

Próximas etapas