Pool de recursos do Resource Governor
Aplica-se a:SQL Server
Instância Gerenciada de SQL do Azure
No administrador de recursos, um pool de recursos representa um subconjunto dos recursos físicos de uma instância do Mecanismo de Banco de Dados. O administrador de recursos permite especificar limites na quantidade total de CPU, E/S física e memória que as solicitações de aplicativo podem usar no pool de recursos.
Cada pool de recursos pode conter um ou mais grupos de carga de trabalho . Quando uma sessão é criada, ela é classificada em um grupo de carga de trabalho específico. As políticas de grupo de carga de trabalho regem as solicitações em execução em uma sessão. As solicitações usam os recursos do pool de recursos subjacente.
Conceitos do pool de recursos
Um pool de recursos representa os recursos físicos do servidor, como CPU, memória e E/S. Dependendo da configuração, os recursos em um pool de recursos podem ser reservados ou compartilhados com outros pools. A configuração do pool é definida especificando uma ou mais das seguintes configurações para cada tipo de recurso (CPU, memória e E/S física):
MIN_CPU_PERCENT e MAX_CPU_PERCENT
Essas configurações definem a largura de banda média mínima e máxima garantida da CPU para todas as solicitações no pool de recursos quando há contenção de CPU. MIN_CPU_PERCENT
é uma reserva de largura de banda da CPU para o pool de recursos que não pode ser usado por outros pools quando há contenção. MAX_CPU_PERCENT
é um limite flexível para a largura de banda da CPU no pool. O limite será imposto somente se houver contenção de CPU com outros pools.
Por exemplo, suponha que os departamentos de Vendas e Marketing em uma empresa compartilhem a mesma instância do SQL Server. O departamento de Vendas tem uma carga de trabalho com uso intensivo de CPU com consultas de alta prioridade. O departamento de Marketing também tem uma carga de trabalho com uso intensivo de CPU, mas tem consultas de prioridade mais baixa. Ao criar um pool de recursos separado para cada departamento, você pode atribuir um percentual mínimo de CPU de de 40 para o pool de recursos de Vendas e um percentual máximo de CPU de 30 para o pool de recursos de Marketing. Essa configuração garante que a carga de trabalho Vendas receba os recursos de CPU necessários e que a carga de trabalho de Marketing não afete as demandas de CPU da carga de trabalho vendas.
O percentual máximo de CPU é um máximo oportunista. Se houver capacidade de CPU disponível, as solicitações usarão tudo isso, até 100%. O valor máximo só se aplica quando há contenção para recursos de CPU. No exemplo anterior, se a carga de trabalho Vendas não estiver em execução, a carga de trabalho de Marketing poderá usar 100% da CPU, se necessário.
CAP_CPU_PERCENT
A configuração de CAP_CPU_PERCENT
é um limite rígido na largura de banda da CPU para todas as solicitações no pool de recursos. As cargas de trabalho associadas ao pool podem usar a capacidade da CPU acima do valor de MAX_CPU_PERCENT
se estiver disponível, mas não acima do valor de CAP_CPU_PERCENT
. Com base no exemplo da seção anterior, suponhamos que o departamento de Marketing esteja sendo cobrado pelo uso do recurso. Eles querem uma cobrança previsível e não querem pagar por mais de 30% da CPU. Essa meta pode ser alcançada definindo CAP_CPU_PERCENT
como 30 para o pool de recursos de Marketing.
MIN_MEMORY_PERCENT e MAX_MEMORY_PERCENT
Essas configurações são a quantidade mínima e máxima de memória reservada para o pool de recursos que não pode ser compartilhada com outros pools de recursos.
Definir um valor mínimo de memória para um pool reserva a memória para solicitações executadas nesse pool de recursos. Essa configuração é diferente de MIN_CPU_PERCENT
, pois a memória reservada pode permanecer no pool mesmo quando não houver solicitações nos grupos de carga de trabalho que pertencem a esse pool. Tenha cuidado ao usar essa configuração, pois essa memória não está disponível para uso por qualquer outro pool, mesmo quando não houver solicitações ativas. Definir um valor máximo de memória para um pool significa que, quando as solicitações estão em execução nesse pool, elas nunca obtêm mais do que esse percentual da memória geral.
Para bancos de dados sem tabelas com otimização de memória, a memória regida por MIN_MEMORY_PERCENT
e MAX_MEMORY_PERCENT
é especificamente a memória de espaço de trabalho de consulta ou a memória de concessão para execução de consulta. A memória do pool de buffers (páginas de índice e dados) é sempre compartilhada entre todos os pools de recursos e não é reservada ou limitada pelo administrador de recursos. Para obter mais informações sobre concessões de memória para execução de consultas, confira Considerações sobre concessão de memória. Para obter mais informações sobre como usar pools de recursos com tabelas com otimização de memória, consulte Associar um banco de dados com tabelas Memory-Optimized a um pool de recursos.
AFFINITY
Essa configuração permite relacionar um pool de recursos a um ou mais agendadores ou nós NUMA a fim de obter um maior isolamento de recursos de CPU. Para usar o cenário de Vendas e Marketing de seções anteriores, vamos supor que o departamento de Vendas precise de um ambiente mais isolado e queira 100% de uma CPU lógica o tempo todo. Usando a opção AFFINITY
, as cargas de trabalho de Vendas e Marketing podem ser agendadas em CPUs lógicas diferentes. Supondo que o CAP_CPU_PERCENT
no pool de Marketing seja especificado, a carga de trabalho de Marketing continuará usando um máximo de 30% de uma CPU, enquanto a carga de trabalho de Vendas usará 100% de outra CPU.
MIN_IOPS_PER_VOLUME e MAX_IOPS_PER_VOLUME
Essas configurações são as operações de E/S mínima e máxima por segundo (IOPS) por volume de disco para um pool de recursos. Você pode usar essas configurações para controlar as ESs físicas emitidas por solicitações de usuário em um determinado pool de recursos. Por exemplo, o departamento de Vendas produz vários relatórios de fim de mês em lotes grandes. As consultas nesses lotes podem gerar ESs que podem saturar o volume de disco e afetar o desempenho de outras cargas de trabalho mais prioritárias na mesma instância do SQL Server. Para isolar essa carga de trabalho, o MIN_IOPS_PER_VOLUME
é definido como 500 e o MAX_IOPS_PER_VOLUME
é definido como 2.000 para o pool de recursos do departamento de vendas.
Pools de recursos definidos pelo sistema e pelo usuário
O administrador de recursos possui dois pools de recursos internos: o pool internal
e o pool default
. Você pode criar pools definidos pelo usuário adicionais.
Pool interno
O pool de internal
rege os recursos consumidos pelo próprio Mecanismo de Banco de Dados. Esse pool sempre contém apenas o grupo internal
e o pool não pode ser modificado de forma alguma. O consumo de recursos pelo pool internal
não é restrito. Todas as cargas de trabalho no pool são consideradas críticas para que o Mecanismo de Banco de Dados funcione. O administrador de recursos permite que o pool de internal
exerça pressão sobre outros pools, mesmo que isso resulte na violação dos limites definidos para esses pools.
Observação
O uso de recursos da pool internal
e do grupo internal
não é subtraído do uso geral de recursos. As porcentagens são calculadas com base nos recursos totais disponíveis.
Pool padrão
Inicialmente, o pool de default
contém apenas o grupo de carga de trabalho default
. Você não pode criar ou remover o pool de default
, mas pode modificá-lo. O pool de default
pode conter grupos de carga de trabalho definidos pelo usuário, além do grupo default
. A partir do SQL Server 2016 (13.x), além do pool de recursos default
para operações do Mecanismo de Banco de Dados, há um default
pool de recursos externo especificamente para processos externos, como a execução de scripts R.
Observação
O grupo de default
pode ser modificado, mas não pode ser movido para fora do pool de default
.
Pool externo
Os usuários podem criar um pool externo para definir recursos para os processos externos. Para o R Services, esse pool controla especificamente rterm.exe
, BxlServer.exe
, python.exe
e outros processos gerados por eles. Para obter mais informações, confira CREATE EXTERNAL RESOURCE POOL.
Pools de recursos definidos pelo usuário
Você pode criar pools de recursos definidos pelo usuário para cargas de trabalho específicas em seu ambiente. O administrador de recursos fornece instruções DDL para criar, modificar e excluir pools de recursos. Para obter mais informações, consulte Criar um pool de recursos, Excluir um pool de recursose Alterar configurações do pool de recursos.
Alocação de recursos entre conjuntos de recursos
Quando você configura limites e reservas de CPU e memória, a soma de valores MIN
de todos os pools não pode exceder 100% dos recursos do servidor. É possível definir os valores MAX
e CAP
em qualquer ponto no intervalo entre o valor MIN
e 100%, inclusive.
Se um pool tiver uma reserva de recursos especificando um valor de MIN
diferente de zero, o valor MAX
efetivo de outros pools poderá ser reduzido. O menor valor MAX
configurado em um pool e a soma dos valores MIN
de outros pools são subtraídos de 100%.
As tabelas a seguir ilustram esse conceito. Nessas tabelas, LEAST(X, Y)
significa o valor menor de X
e Y
. Todos os valores numéricos são percentuais.
A primeira tabela mostra as configurações do pool de internal
, o pool de default
e dois pools definidos pelo usuário.
Nome do pool | MIN |
MAX |
Effective MAX |
Shared % |
Comentário |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 | Effective MAX e Shared % não são aplicáveis ao pool de internal . |
default |
0 | 100 | 30 | 30 | Effective MAX = LEAST(100, 100 - (20 + 50)) = 30 Shared % = Effective MAX - MIN = 30 |
Pool 1 |
20 | 100 | 50 | 30 | Effective MAX = LEAST(100, 100 - 50) = 50 Shared % = Effective MAX - MIN = 30 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - 20) = 70 Shared % = Effective MAX - MIN = 20 |
Usando a tabela anterior como exemplo, podemos ilustrar ainda mais os ajustes que ocorrem quando outro pool de recursos é criado. Esse pool é chamado Pool 3
e tem uma configuração MIN
de 5.
Nome do pool | MIN |
MAX |
Effective MAX |
Shared % |
Comentário |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 | Effective MAX e Shared % não são aplicáveis ao pool de internal . |
default |
0 | 100 | 25 | 25 | Effective MAX = LEAST(100, 100 - (20 + 50 + 5)) = 25 Shared % = Effective MAX - MIN = 25 |
Pool 1 |
20 | 100 | 45 | 25 | Effective MAX = LEAST(100, 100 - (50 + 5))) = 45 Shared % = Effective MAX - MIN = 25 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - (20 + 5))) = 70 Shared % = Effective MAX - MIN = 20 |
Pool 3 |
5 | 100 | 30 | 25 | Effective MAX = LEAST(100, 100 - (50 + 20))) = 30 Shared % = Effective MAX - MIN = 25 |
A parte compartilhada do pool é para onde os recursos disponíveis podem ir se os recursos estiverem disponíveis. Porém, ao serem consumidos, os recursos vão para o pool especificado e não são compartilhados. Esse comportamento pode melhorar a utilização de recursos em casos em que não há solicitações em um determinado pool e os recursos não reservados para o pool podem ser liberados para outros pools.
Alguns casos extremos da configuração do pool são:
- Todos os pools definem mínimos que, totalizados, representam 100% dos recursos do servidor. Nesse caso, os máximos efetivos são iguais aos mínimos. Isso equivale a dividir os recursos do servidor em partes não sobrepostas, independentemente de como os recursos são consumidos dentro de um determinado pool.
- Todos os pools têm mínimo com valor zero. Todos os pools compartilham e competem por recursos disponíveis e seus tamanhos de runtime são baseados no consumo de recursos em cada pool. Outros fatores, como políticas de grupo de carga de trabalho, desempenham um papel na definição dos tamanhos de pool.
Tarefas do pool de recursos
Os pools de recursos podem controlar uma variedade de recursos do sistema. Para obter mais informações, confira CREATE RESOURCE POOL.
Para obter mais exemplos e um passo a passo completo, consulte Tutorial: exemplos de configuração do administrador de recursos e práticas recomendadas.
Descrição da tarefa | Artigo |
---|---|
Criar um pool de recursos | Criar um pool de recursos |
Modificar as configurações do pool de recursos | Alterar configurações do pool de recursos |
Excluir um pool de recursos | Excluir um pool de recursos |
O administrador de recursos fornece instruções DDL para criar, modificar e excluir pools de recursos.
Para obter mais informações, incluindo os detalhes sobre reservas e limites do pool de recursos, consulte: