Insights sobre a tecnologia de controle e gerenciamento de recursos refinados do GaussDB

Este artigo foi compartilhado pela Huawei Cloud Community " [GaussTech Express] Interpretação técnica de gerenciamento e controle refinado de recursos ", autor: banco de dados GaussDB.

fundo

O controle e o isolamento de recursos em clusters de banco de dados são demandas de longa data dos clientes corporativos. Como um banco de dados distribuído de nível empresarial, o Huawei Cloud GaussDB tem o compromisso de atender às necessidades de gerenciamento das empresas para grandes clusters de bancos de dados.

Os recursos que o banco de dados pode gerenciar incluem recursos de computação e recursos de armazenamento. Os recursos de computação incluem CPU, memória, E/S e recursos de armazenamento, incluindo espaço de armazenamento de dados, espaço de armazenamento de log e arquivos temporários.

Do ponto de vista do usuário, o gerenciamento e o controle de recursos garantem o compromisso com acordos de nível de serviço, estabelecendo limites ou limites de prioridade no uso de recursos, ao mesmo tempo em que atendem ao isolamento de recursos entre diferentes usuários e alcançam o objetivo de compartilhar recursos de banco de dados entre vários locatários.

Do ponto de vista do sistema, a introdução de métodos de monitoramento e controle de recursos pode atingir o objetivo de utilização racional dos recursos sob condições controláveis, evitar o esgotamento dos recursos e evitar que o sistema pare de responder e trave. A prioridade do trabalho pode garantir o bom funcionamento dos trabalhos, evitar que um trabalho afete outros trabalhos quando o uso de recursos for muito alto e maximizar a utilização dos recursos quando os recursos são abundantes. Além disso, também pode atender às expectativas externas e garantir o uso máximo dos recursos do sistema. Ao controlar o trabalho, podemos garantir que ele seja estável e evitar comportamento incontrolável durante a execução do trabalho.

Para resolver os objetivos acima, o banco de dados Huawei Cloud GaussDB fornece uma solução para gerenciamento e controle refinado de recursos no cluster de banco de dados - gerenciamento e controle refinado de recursos. Esta solução fornece recursos correspondentes de gerenciamento e controle em diferentes granularidades de controle (como nível de usuário, nível de sessão e nível de instrução) e diferentes dimensões de controle (CPU, memória e E/S). Os usuários podem adotar dimensões de controle apropriadas e granularidade de controle de acordo com suas próprias necessidades de negócios para atingir os objetivos de controle e isolamento de recursos e atender às necessidades de controle de recursos em diferentes cenários.

Arquitetura Tecnológica

Vejamos primeiro a arquitetura técnica e os princípios operacionais do gerenciamento e controle refinado de recursos:

Diapositivo 1.PNG

Como você pode ver na imagem acima, GaussDB fornece um módulo de pool de recursos para completar a lógica de gerenciamento e controle de CPU, memória e IO. Os usuários podem criar um pool de recursos e especificar os compartilhamentos de CPU, memória e E/S que ele pode usar e vincular o pool de recursos ao usuário. Posteriormente, o trabalho iniciado pelo usuário estará sujeito ao gerenciamento e controle de recursos em tempo real durante a operação dos módulos de otimização e análise do kernel do banco de dados, mecanismo de execução e mecanismo de armazenamento para garantir que sua CPU, memória e IO estejam dentro do escopo do pool de recursos correspondente.
 
Suponha que a Empresa A implante uma instância do GaussDB e três aplicativos diferentes acessem a instância ao mesmo tempo, como negócios OLTP, negócios de relatórios e outros negócios de baixa prioridade. A Empresa A espera gerenciar e controlar razoavelmente os recursos das três empresas para que o sistema possa funcionar sem problemas e, ao mesmo tempo, garantir o uso máximo dos recursos. Podemos usar o administrador do sistema para executar o seguinte comando para definir a proporção de compartilhamento de recursos para os três usuários corporativos como 50:30:10, e os 10% restantes são reservados para o sistema.
 
Aqui estão apenas exemplos simples de uso. O significado específico de cada parâmetro será explicado em detalhes nos capítulos seguintes.
 
crie um pool de recursos respool_tp com(control_group="cgroup_tp", max_dynamic_memory="5GB", max_shared_memory="5GB", io_limits=50, io_priority="High");
alterar função tp_user RESOURCE POOL 'respool_tp';

crie o pool de recursos respool_report com(control_group="cgroup_report", max_dynamic_memory="3GB", max_shared_memory="3GB", io_limits=30, io_priority="Medium");
alterar função report_user RESOURCE POOL 'respool_report';

criar pool de recursos respool_other with(control_group="cgroup_other", max_dynamic_memory="1GB", max_shared_memory="1GB", io_limits=10, io_priority="Low");
alterar função other_user RESOURCE POOL 'respool_other';
Após as operações acima, quando negócios OLTP, negócios de relatórios e outros negócios de baixa prioridade usam tp_user, report_user e other_user para se conectar ao GaussDB para executar trabalhos, esses três negócios serão controlados pelos pools de recursos correspondentes respool_tp, respool_report e respool_other. recurso Quando ocorre contenção, é garantido que os três negócios possam utilizar 50%, 30% e 10% dos recursos do cluster GaussDB respectivamente.

principais capacidades

Depois de compreender a arquitetura geral e o uso do gerenciamento e controle detalhado de recursos, vamos dar uma olhada em seus principais recursos e no valor comercial que esses recursos podem trazer aos clientes.

Controle da CPU

O gerenciamento e controle da CPU do GaussDB é baseado na granularidade do pool de recursos para gerenciamento e controle de recursos do usuário. Cada pool de recursos está vinculado a um grupo de controle e o gerenciamento e controle da CPU são implementados por meio do grupo de controle (Grupo de Controle, CGroup). CGroup é um mecanismo fornecido pelo kernel Linux para limitar, registrar e isolar os recursos físicos (como CPU, memória, IO, etc.) usados ​​por grupos de processos.
 
Levando em consideração o isolamento e configurabilidade de sistemas de banco de dados, usuários e jobs em diferentes dimensões, o GaussDB utiliza as características hierárquicas dos grupos de controle para construir um modelo que esteja em conformidade com o cenário do banco de dados (veja a figura abaixo), que atenda às principais características de SLA do cliente e oferece suporte a três dimensões de isolamento e controle hierárquico: isolamento entre programas de banco de dados e programas não pertencentes a banco de dados, isolamento entre threads de backup residentes do banco de dados e threads de tarefa de execução e isolamento entre vários usuários de banco de dados.

Slide 2.PNG

O grupo de controle GaussDB pode definir a porcentagem de CPU e o limite superior do número de núcleos. O nó raiz é responsável por controlar o compartilhamento de CPU disponível para o processo GaussDB; o grupo de controle Backend é responsável por controlar o compartilhamento de CPU do residente do banco de dados; threads de fundo (Vacuum, DefaultBackend); o grupo de controle de classe é responsável por controlar o compartilhamento de CPU do thread de trabalho do usuário (UserClass1, UserClass2,...UserClassN) também pode ser criado; dentro do grupo de controle Classe para um controle mais refinado.
 
Continuando o exemplo acima, usamos a ferramenta CGroup fornecida pelo GaussDB para criar grupos de controle para os negócios OLTP da empresa A, negócios de relatórios e outros negócios de baixa prioridade, com taxas de alocação de CPU de 50%, 30% e 10%.
 
gs_cgroup -c -S cgroup_tp -s 50;
gs_cgroup -c -S cgroup_report -s 30;
gs_cgroup -c -S cgroup_other -s 10;
A execução do comando acima significa que criamos com sucesso três grupos de controle. Podemos então especificar o nome do grupo de controle ao criar um pool de recursos. Os trabalhos iniciados por usuários vinculados ao pool de recursos serão controlados pelo compartilhamento de CPU correspondente do grupo de controle.
 
Há dois problemas aos quais você precisa prestar atenção ao controlar a CPU com o CGroup:
 
Primeiro, se a CPU de um thread precisar ser controlada por um CGroup, então a API do sistema do CGroup precisará ser executada para vincular o CGroup correspondente ao thread, o que é uma operação demorada;
Segundo, o efeito de controle da CPU do CGroup é melhor quando o número de threads é proporcional à CPU.
 
Com base nesses problemas, o GaussDB propôs o conceito de grupo de threads. Cada pool de recursos corresponde a um grupo de threads, e os threads no grupo de threads são vinculados ao CGroup correspondente ao pool de recursos. Ao mesmo tempo, o GaussDB ajustará o número de threads em cada grupo de threads para ser consistente com o compartilhamento de CPU do CGroup correspondente. Veja a figura abaixo para detalhes:
Slide 3.PNG
Cada trabalho iniciado pelo usuário será distribuído aos threads no grupo de threads correspondente para execução. Como o thread foi vinculado ao nó Cgroup correspondente, o sistema operacional concluirá o gerenciamento e o controle da CPU durante o agendamento do thread.
 
GaussDB fornece um mecanismo de usuário de duas camadas. O pool de recursos vinculado ao grupo de controle de classe é chamado de pool de recursos de grupo, e os usuários correspondentes são usuários do grupo. os usuários correspondentes são usuários corporativos. Os usuários do grupo geralmente correspondem a um departamento, enquanto os usuários empresariais correspondem a diferentes negócios deste departamento. A parcela de recursos de cada dimensão de recurso no pool de recursos de negócios excederá a parcela do pool de recursos do grupo ao qual pertence, atingindo assim a meta de gerenciamento e controle de recursos em dois níveis?
 
O controle de CPU também fornece um GUC denominado session_respool para limitar a CPU de uma única sessão para não exceder o limite de CPU do pool de recursos correspondente.

Gerenciamento de memória

GaussDB fornece gerenciamento e controle de memória dinâmica e cache compartilhado. Ao criar um pool de recursos, você pode especificar max_dynamic_memory e max_shared_memory para completar as configurações de limite de memória dinâmica e cache compartilhado, respectivamente.
 
O gerenciamento dinâmico de memória não altera seu mecanismo original de alocação de recursos de memória. Ele apenas adiciona uma camada de julgamento lógico antes de alocar a memória para contabilizar a memória alocada excessivamente e verifica se o valor contábil atinge o limite superior da memória permitida. ao controle. Quando a memória dinâmica exceder o limite superior, o trabalho não conseguirá solicitar memória. Quando um trabalho é encerrado, a memória solicitada pelo trabalho será liberada para garantir que outros trabalhos possam ser executados normalmente. Da mesma forma, quando o cache compartilhado usado por um trabalho excede o limite superior do pool de recursos e você solicita o cache compartilhado novamente, primeiro você precisa liberar o cache compartilhado que já ocupou, como BufferPool. a vaga se candidata a uma página, a página que ela já ocupava será eliminada. As páginas restantes após a eliminação estarão disponíveis para seu uso continuado.
 
Além do controle de memória granular do usuário, o GaussDB também fornece dois parâmetros GUC, session_max_dynamic_memory e query_max_mem, para concluir o controle de memória dinâmica em nível de sessão e de instrução. Quando a memória dinâmica usada por uma sessão ou instrução atinge o limite de GUC, o trabalho. não solicita memória.

Controle de E/S

O IO de leitura e gravação do disco do GaussDB é concluído por um thread em segundo plano. Este thread não consegue distinguir o proprietário da página. Ele apenas grava no disco em ordem cronológica e não pode controlar o uso de IO diferente para usuários diferentes. Com base nisso, considere que a função de gerenciamento e controle de E/S usa estatísticas de E/S lógicas para controlar e limitar a E/S de leitura e gravação de usuários ou sessões. Uma contagem de E/S lógica é adicionada entre o thread de trabalho e o cache compartilhado. cada 6.000 (pode ser passado io_control_unit GUC (modificado pelo GUC) é contado como um IO. Quando o número de solicitações de leitura e gravação de IO geradas em um segundo excede o limite definido pelo pool de recursos, a solicitação de IO será adicionada a uma espera fila do thread de segundo plano, e o thread de segundo plano responderá à fila de espera. Essas solicitações de IO são monitoradas e, quando seu tempo de espera atende às condições, essas solicitações de IO são despertadas da fila de espera.
 
GaussDB suporta dois modos de gerenciamento e controle de recursos de IO. O modo numérico online controla os recursos de IO definindo um valor fixo para acionar os tempos de IO, significa que quando o uso atual do disco atingir mais de 95% por um longo tempo, todos os trabalhos; não pode ser Ao atingir o modo de valor online, os usuários podem controlar o IO através deste modo para controlar a proporção de prioridade do trabalho que originalmente acionou o IO. A prioridade inclui três níveis: Alta, Média e Baixa.
 

4.PNG

Continuando com o exemplo acima, criamos pools de recursos para os negócios OLTP da empresa A, negócios de relatórios e outros negócios de baixa prioridade, e definimos os pesos de IO como Alto, Médio e Baixo, respectivamente. Então, o negócio OLTP pode usar 50% das solicitações de IO para ler ou gravar dados no BufferPool, e um pequeno número de solicitações de IO entrará na fila de espera para esperar, o negócio de relatórios pode usar 20% das solicitações de IO para ler; ou gravar dados no BufferPool. Mais solicitações de IO entrarão na fila de espera para esperar; outras empresas de baixa prioridade podem usar 10% das solicitações de IO para ler ou gravar dados no BufferPool, e mais solicitações de IO entrarão na fila de espera para. espere; o thread de monitoramento em segundo plano atravessará periodicamente a fila de espera de IO e ativará solicitações de IO que atendam ao tempo de espera necessário para ler ou gravar dados do BufferPool.
 
Além de oferecer suporte ao controle IO granular do usuário, o GaussDB também oferece suporte à configuração dos parâmetros GUC no nível da sessão io_limits e io_priority para concluir o controle IO de trabalhos permitidos em uma sessão especificada.

Número de conexões e gerenciamento de simultaneidade

GaussDB fornece controle de número de conexão e controle de simultaneidade com base em pools de recursos. Ao criar um pool de recursos, você pode especificar max_connections e max_concurrency para completar as configurações do número de conexões e simultaneidade, respectivamente. os três negócios da Empresa A no exemplo anterior O pool completa o gerenciamento e controle do número de conexões e do número de simultaneidades:
 
altere o pool de recursos respool_tp com (max_connections=-1, max_concurrency = -1);
altere o pool de recursos respool_report com (max_connections=200, max_concurrency = 100);
altere o pool de recursos respool_other com (max_connections=100, max_concurrency = 50);
Depois que o SQL acima for executado com sucesso, ele entrará em vigor em tempo real. O número de conexões e simultaneidade do negócio OLTP da empresa A não é limitado. Ela pode usá-lo desde que o cluster tenha recursos. O número máximo de conexões para o negócio de relatórios é 200 e o número máximo de conexões para outros de baixa prioridade; negócios é 100. Quando esses dois negócios Quando o número de conexões estabelecidas exceder esse valor, o kernel do GaussDB interceptará automaticamente e reportará que o número atual de conexões é insuficiente e o link falha, o número máximo de simultaneidades para o negócio do relatório é 100; , e o número máximo de simultaneidades para outros negócios de baixa prioridade é 50. Quando esses dois negócios Quando o número de trabalhos iniciados ao mesmo tempo exceder esse valor, os trabalhos em excesso entrarão na fila de espera, o GaussDB não irá acordá-lo. continue executando o trabalho até que os trabalhos existentes sejam concluídos.

Gerenciamento e controle do espaço de armazenamento

O gerenciamento e controle do espaço de armazenamento são usados ​​para limitar as cotas de espaço que diferentes usuários podem usar para evitar que todo o negócio do banco de dados seja bloqueado devido ao uso excessivo do espaço de armazenamento por um único usuário. GaussDB gerencia e controla recursos de armazenamento especificando o tamanho do espaço de armazenamento ao criar um usuário.
 
Os recursos de espaço de armazenamento são divididos em três tipos: espaço de tabela permanente (Espaço Perm), espaço de tabela temporário (Espaço Temp) e espaço em disco inferior do operador (Espaço Spill).
 
Você pode usar o SQL a seguir para concluir o gerenciamento e controle do espaço em disco para os usuários correspondentes aos três negócios da empresa A no exemplo anterior.
 
alterar usuário tp_user PERM SPACE '200G' TEMP SPACE '20G' SPILL SPACE '20G';
alterar usuário report_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
alterar usuário other_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
 
O gerenciamento de espaço de armazenamento oferece suporte ao gerenciamento de espaço de armazenamento para usuários de grupo e usuários corporativos. Quando o usuário do grupo correspondente ao usuário empresarial tem restrições de espaço, o espaço do usuário empresarial também é limitado pelo limite de espaço do grupo de usuários. Depois de especificar o tamanho do espaço de armazenamento, todas as operações de gravação do usuário no DN aumentarão o espaço usado pelo usuário e as operações de exclusão diminuirão o espaço usado pelo usuário. O CN obterá periodicamente o espaço total usado do DN e calculará o espaço. espaço usado pelo usuário. O espaço é julgado. Quando o valor máximo é excedido, o trabalho de gravação é cancelado (inserir/criar tabela como/copiar) e os trabalhos de gravação subsequentes relatam um erro e saem.

Demonstração de recursos

Demonstração de recursos Aqui simplesmente demonstraremos o efeito de controle da CPU para todos, porque a CPU tem o maior impacto nos negócios.
 
Crie dois pools de recursos e defina 20% e 60% da CPU respectivamente e, em seguida, use dois usuários vinculados aos pools de recursos para começar a administrar o negócio. Observe o uso real da CPU.

1. Crie um grupo de controle:

gs_cgroup -c -S classe1 -s 20;
gs_cgroup -c -S classe2 -s 60;

2. Crie um pool de recursos:

CRIAR POOL DE RECURSOS xuuer_pool com (control_group = "class1");
CRIAR POOL DE RECURSOS xyuser1_pool com (control_group = "class2");

3. Crie um pool de recursos vinculado ao usuário:

criar função user1 RESOURCE POOL 'xuuer_pool';
criar função user2 RESOURCE POOL 'xyuser1_pool';
4. Observe o status da CPU do sistema por meio de Top, e o gerenciamento e controle refinado de recursos fornecem a função gs_wlm_respool_cpu_info para observar o status da CPU em tempo real de cada pool de recursos.

Slide 5.PNG

Conforme mostrado na figura acima, pode-se observar que a CPU inicial do sistema está ociosa e a visualização de monitoramento da CPU do pool de recursos também mostra que o uso da CPU é 0. Deixe o usuário1 iniciar a execução de serviços. Pode-se observar que a CPU do sistema está ocupada por determinados serviços. Consultar a visualização de monitoramento da CPU do pool de recursos mostra que o usuário1 pode usar 80% da CPU. Neste momento, deixe o usuário2 também começar a executar os negócios. A observação mostra que a CPU do sistema entrou em um estado ocupado. Consultar a função do sistema de monitoramento de recursos da CPU do pool de recursos mostra que o uso da CPU do usuário1 começa a diminuir e o uso da CPU do usuário2 começa a aumentar. .

Classifique o uso da CPU dos dois usuários e desenhe o gráfico de curva conforme mostrado abaixo. Pode-se observar que o uso da CPU do usuário1 e do usuário2 acabará se equilibrando para um estado de 3:1, o que é consistente com 20% e 60. configurações no grupo de controle CGroup correspondente à proporção% do pool de recursos, alcançando o efeito do controle da CPU.

Slide 6.PNG

Resumir

O recurso refinado de gerenciamento e controle de recursos atualmente oferece suporte centralizado e distribuído. O gerenciamento e controle distribuído de recursos de computação significa que cada nó controla independentemente os recursos de seu próprio nó, enquanto o gerenciamento e o controle de recursos de armazenamento são gerenciados como um todo a partir da dimensão do cluster.

O gerenciamento e o controle refinados de recursos servem como base para o isolamento de recursos multilocatários, permitindo a divisão e o controle precisos dos recursos e resolvendo o problema de inutilização do cluster causado por recursos insuficientes em cenários de alta carga. Este recurso é adequado para cenários onde o isolamento de dados não é sensível, mas o isolamento de recursos é necessário para diferentes empresas. Se os clientes tiverem requisitos para isolamento de recursos e isolamento de dados, você pode prestar atenção ao recurso de banco de dados multilocatário que compartilharemos mais tarde!

 

Clique para seguir e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível~

Estudantes do ensino médio criam sua própria linguagem de programação de código aberto como uma cerimônia de maioridade - comentários contundentes de internautas: Contando com a defesa, a Apple lançou o chip M4 RustDesk Os serviços domésticos foram suspensos devido a fraude desenfreada. No futuro, ele planeja produzir um jogo independente na plataforma Windows Taobao (taobao.com) Reiniciar o trabalho de otimização da versão web, destino dos programadores, Visual Studio Code 1.89 lança Java 17, a versão Java LTS mais comumente usada, Windows 10 tem um participação de mercado de 70%, o Windows 11 continua diminuindo Open Source Daily | Google apoia Hongmeng para assumir o controle do Rabbit R1 de código aberto; a ansiedade e as ambições da Microsoft encerraram a plataforma aberta;
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/4526289/blog/11105586
Recomendado
Clasificación