Gerenciamento de recursos GreenPlum (baseado em cgroups linux)

   

índice

Recursos de CPU e memória ligeiramente

Isolamento de recursos de memória do sistema por grupos de recursos


      Todos os sistemas que compartilham recursos enfrentam um grande desafio - gerenciamento de recursos. Quando várias instruções de diferentes usuários estão sendo executadas no banco de dados ao mesmo tempo, o banco de dados precisa alocar recursos de forma inteligente, como CPU e memória, entre essas instruções desses usuários para garantir o bom funcionamento dessas instruções. O gerenciamento de recursos precisa manter um equilíbrio delicado entre justiça, certeza e utilização máxima de recursos e fornecer aos usuários algumas opções de configuração para se adaptarem a diferentes cenários de uso. Justiça e certeza significa que um usuário ou uma frase pode garantir que uma parte do recurso será obtida, e essa parte do recurso não será privada em nenhum momento. Dessa forma, a frase do usuário equivale a reter um conjunto mínimo de recursos disponíveis, independentemente desta frase Antecipada e tardia, rápida e lenta, pelo menos esta parte dos recursos pode ser obtida. A utilização máxima de recursos significa que, quando o sistema está relativamente ocioso, uma instrução pode fazer uso total desses recursos ociosos para concluir a execução rapidamente.

Recursos de CPU e memória ligeiramente

Os recursos da CPU podem ser programados de acordo com fatias de tempo.

Relativamente falando, o ajuste da taxa de uso da CPU de um processo pode ser feito rapidamente. Depois que os recursos de memória são alocados e usados, a liberação leva muito tempo para ser concluída ou é muito complicada de implementar, portanto, é difícil ajustar dinamicamente os recursos de memória. Greenplum 5 implementa gerenciamento de recursos de CPU baseado em cgroup Linux e gerenciamento de recursos de memória que é completamente rastreado, registrado e alocado pelo Greenplum.Este novo gerenciamento de recursos é denominado ResourceGroup .

O grupo de recursos avalia totalmente os diferentes métodos de implementação e realiza um gerenciamento justo e eficiente de acordo com as diferentes características dos recursos de CPU e memória.

Cgroup é um bom recurso de alocação de recursos que entrou no kernel do Linux.Ele permite aos usuários criar grupos cgroup diferentes e limitar a quantidade de uso da CPU no arquivo de configuração. Quando os usuários conectam diferentes processos aos grupos cgroup correspondentes, os recursos da CPU que esses processos podem usar serão limitados ou próximos aos dados configurados, garantindo assim o isolamento dos recursos da CPU entre os diferentes grupos.

Cgroup também permite que um grupo de processos use recursos de CPU excedendo a cota, desde que o uso de CPU de outros grupos no sistema seja baixo ou todo o sistema tenha recursos de CPU sobressalentes . Este recurso é ideal para aplicativos de banco de dados. Os grupos de recursos aproveitam ao máximo esse recurso. Por exemplo, os usuários podem criar dois grupos de recursos por meio das seguintes instruções SQL:

Para esta configuração, o usuário tom1 é associado ao grupo de recursos rg1, e todas as suas consultas serão executadas no grupo de recursos rg1, semelhante ao usuário tom2. Desta forma, quando o sistema está relativamente inativo, por exemplo, quando não há instrução em execução em rg2 e outros grupos, o usuário tom1 pode realmente usar mais recursos da CPU e pode até mesmo exceder o limite de recursos da CPU definido pelo grupo de recursos rg1 em 50 %, por exemplo, 60% ~ 70%. Se todo o sistema estiver ocupado e houver instruções suficientes em outros grupos ou rg2 para executar, as instruções em rg1 reduzirão imediatamente o uso da CPU do sistema, reduzindo-o aos 50% limitados. Isso resolve perfeitamente o problema de utilização máxima de recursos e justiça. Esse recurso pode ser observado de forma mais intuitiva na figura.

Este recurso de CPU implementado pelo grupo de recursos pode cuidar bem de todos os tipos de cargas, especialmente consultas curtas. Uma consulta curta é relativa a uma consulta longa. Uma consulta longa é uma consulta complexa que pode ser executada por muitos minutos ou até horas. Ela consome muitos recursos do sistema ou até mesmo todos os recursos do sistema. A consulta curta tem alguns milissegundos ou consultas curtas de segundo nível, a quantidade de dados envolvida é pequena e apenas uma pequena quantidade de recursos de CPU e memória pode ser concluída. Para um produto de dados que suporta carregamentos mistos, consultas longas e consultas curtas no sistema aparecerão irregularmente. Um ponto problemático para muitos usuários é que quando uma consulta longa está sendo executada no sistema, esta instrução pode ocupar muitos recursos do sistema, como CPU ou a memória faz consultas curtas, incapazes de obter nem mesmo uma pequena parte dos recursos, o que se manifesta como execução lenta e tempo de execução mais longo. Combinar grupos de recursos no Greenplum pode evitar esse problema.

Para os grupos de recursos acima rg1 e rg2, se você executar uma consulta curta em rg2 e uma consulta longa em rg1, quando não houver nenhuma consulta curta, a consulta longa usará mais recursos da CPU;

Quando uma consulta curta atinge rg2, a consulta longa desistirá imediatamente do excesso de recursos da CPU e a consulta curta pode aproveitar imediatamente 20% dos recursos da CPU que deveria usar. Em nosso teste, esse ajuste de recurso será concluído em milissegundos .

A figura a seguir é um resumo dos dados de teste, podendo-se perceber que quase não há diferença no tempo de execução da consulta curta quando há uma consulta longa e quando não há consulta longa. Se o usuário definir o recurso de CPU de rg2 que executa consultas curtas com um valor muito grande (por exemplo, 60% ou mais), então quando não houver consulta curta, outros grupos ainda podem compartilhar esta parte da CPU; quando houver uma consulta curta, a consulta curta pode aproveitar a maioria dos recursos da CPU para ser concluída rapidamente, de modo a alcançar um bom recurso voltado para consultas curtas.

Um novo recurso cpuset adicionado no Greenplum 5.9 pode melhor garantir recursos para consultas curtas. Quando um usuário cria um grupo de recursos rg3 semelhante ao seguinte, todas as instruções em execução em rg3 serão agendadas para execução no núcleo 1 da CPU e as instruções em rg3 são exclusivas para o núcleo 1 da CPU e as instruções em outros grupos só podem ser enviadas para outros núcleos. Quando uma consulta curta precisa ser executada no rg3, ela será executada no núcleo 1 imediatamente, sem se preocupar em agendar o processo da consulta grande primeiro. Um cliente testou as características do cpuset e descobriu que ele pode reduzir significativamente o tempo de resposta de consultas curtas.

Isolamento de recursos de memória do sistema por grupos de recursos

Para rg1 e rg2, eles usarão 30% e 20% da memória do sistema, respectivamente. Se a soma da memória utilizada pelos extratos dos respectivos grupos ultrapassar a cota, a memória compartilhada global de todo o sistema será eliminada . Se a memória compartilhada global tiver sido usada, essa instrução falhará, garantindo a segurança de todo o cluster. A memória compartilhada global do sistema é a memória não alocada restante após a criação do grupo de recursos.Esta parte da memória compartilhada fornece um certo grau de flexibilidade para cargas mistas. Se o usuário puder prever bem os requisitos de memória de cada grupo, a memória do sistema pode ser alocada entre os grupos, de modo que o uso de memória de cada grupo possa ser limitado apenas ao limite de seu próprio grupo. Se o negócio do usuário e a carga de cada grupo não forem completamente determinados, ou houver grandes consultas que ocorrem de vez em quando que requerem uma quantidade particularmente grande de recursos de memória, parte da memória compartilhada pode ser reservada para compartilhamento entre todos os grupos. Esta parte da instrução é incerta, mas pode exigir uma grande quantidade de recursos de memória, se você tiver usado o compartilhamento de memória em seu grupo, poderá usar essa parte dos recursos compartilhados para continuar a execução . Para a alocação de memória entre as instruções no grupo, o grupo de recursos também pesará vários fatores. Ao criar um grupo de recursos, você pode passar

  • memory_shared_quota
  • memory_spill_ratio

Faça ajustes finos para o uso de memória no grupo, por exemplo:

memory_shared_quota divide a memória em um grupo de recursos em duas partes:

  1. Parte compartilhada de cada frase no grupo
  2. Uma parte fixa de cada declaração

  • A metade esquerda representa a proporção de memória que pode ser usada por 4 segmentos no mesmo nó. A proporção de memória na parte em branco é igual a 1-gp_resource_group_memory_limit, que é reservado para o sistema operacional e processos de fundo Greenplum. A soma de as partes cinzas são gp_resource_group_memory_limit e, em seguida, distribuídas uniformemente para cada segmento.
  • A metade direita representa a alocação de memória de diferentes grupos de recursos em um segmento. Haverá admin_group e default_group integrados em cada segmento . Para o grupo rg_sample criado pelo usuário, a relação entre sua memória compartilhada e a memória reservada para cada transação simultânea é mostrada em cinza. Como a simultaneidade definida por este grupo de recursos é 8, há 8 segmentos de memória fixa reservados. Ao mesmo tempo, o memory_shared_quota deste grupo de recursos é 50, o que significa que 50% de sua memória total é memória compartilhada e os outros 50% é memória fixa reservada, que é dividida igualmente por 8 transações.

Cada instrução em execução ocupará exclusivamente uma parte da memória fixa, conforme mostrado no slot de transação nº 1. Após a execução da instrução, esta parte da memória fixa será usada primeiro e, em seguida, a parte compartilhada no grupo será usada, e então a parte global compartilhada será usada finalmente. Essa configuração de recursos de vários níveis pode atingir um bom equilíbrio em termos de isolamento e compartilhamento de recursos, de modo a atender aos requisitos de memória de diferentes cenários de uso.

Outra propriedade de configuração memory_spill_ratio do grupo de recursos afetará o uso de memória de uma única instrução. Para o grupo rg_sample, este atributo é definido como 30, o que significa que quando a instrução começa a ser executada, a quantidade de memória que pode ser usada pela instrução é calculada e 30% é alocado como uso inicial. Quando o plano de execução da instrução é gerado, a memória será alocada entre diferentes operadores (como operadores de varredura de tabela ou operadores de classificação) de acordo com esta configuração. Por padrão, apenas 100 KB de memória precisam ser alocados para operações comuns. Para operações que exigem memória, como associação de hash ou classificação, a memória restante será alocada uniformemente. Ao realizar a associação ou classificação de hash, se o uso de memória exceder a memória alocada para ele, a operação do operador passa a usar arquivos externos para armazenar alguns resultados intermediários, aliviando assim o uso de memória.Este processo é denominado spill. Normalmente, neste processo, o uso de memória do operador continuará a aumentar, razão pela qual o memory_spill_ratio deve ser definido como 30 e ajustável, nem sempre 100%. memory_spill_ratio também é um GUC que pode ser definido na sessão (ou seja, Configuração do usuário global, chinês é a configuração do usuário global, é alguma configuração que pode ser definida no mestre, segmento ou todos os nós). Após a configuração, ela terá efeito para instruções subsequentes na mesma sessão, para que os usuários possam permitir que algumas instruções usem mais ou menos memória.

Como pode ser visto na Figura 7-4, os grupos de recursos usam métodos diferentes para obter gerenciamento de recursos de memória de baixa granularidade entre nós, segmentos, grupos de usuários, usuários, instruções de transação e diferentes operadores dentro das instruções .

Realize o gerenciamento refinado de recursos da CPU entre nós, segmentos, grupos de usuários e instruções de transação. Esses projetos avaliam totalmente a eficiência do uso de recursos e garantem o isolamento do uso de recursos. Ao mesmo tempo, levam em consideração a certeza e a incerteza no uso de recursos. Podem fornecer um bom suporte para consultas curtas transacionais e consultas analíticas longas. pode atender aos requisitos de uso de recursos e gerenciamento de restrições sob diferentes cargas.

E / S de disco e rede também são recursos compartilhados com os quais todos geralmente se preocupam. No Greenplum, o acesso ao disco e o acesso à rede são conduzidos de forma síncrona pelo mecanismo de execução , portanto, quando os recursos da CPU são alocados entre grupos diferentes, em teoria, o disco e a E / S da rede também recebem restrições de alocação correspondentes. É claro que os computadores modernos costumam ter muitos núcleos.Quando processos diferentes estão sendo executados em paralelo nesses núcleos, os recursos de E / S que eles usam podem não ser alocados em proporção total à CPU. Para esta parte das necessidades possíveis, a comunidade Greenplum continua acompanhando o feedback dos usuários, e é possível apoiar o gerenciamento desses dois recursos em versões futuras.

Acho que você gosta

Origin blog.csdn.net/MyySophia/article/details/113796280
Recomendado
Clasificación