Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Perguntas frequentes/ Desempenho do banco de dados/ Gerenciamento de recursos da CPU do GaussDB(DWS)
Atualizado em 2024-05-09 GMT+08:00

Gerenciamento de recursos da CPU do GaussDB(DWS)

Visão geral do gerenciamento de recursos da CPU

Em diferentes cenários de serviço, os recursos do sistema (CPU, memória, I/O e recursos de armazenamento) do banco de dados são alocados adequadamente às consultas para garantir o desempenho da consulta e a estabilidade do serviço.

GaussDB(DWS) fornece a função de gerenciamento de recursos. Você pode colocar recursos em diferentes pools de recursos, que são isolados uns dos outros. Em seguida, você pode associar usuários de banco de dados a esses pools de recursos. Quando um usuário inicia uma consulta SQL, a consulta será transferida para o pool de recursos associado ao usuário. Você pode especificar o número de consultas que podem ser executadas simultaneamente em um pool de recursos, o limite superior de memória usado para uma única consulta e os recursos de memória e CPU que podem ser usados por um pool de recursos. Desta forma, você pode limitar e isolar os recursos ocupados por diferentes cargas de trabalho.

O GaussDB(DWS) usa cgroups para gerenciar e controlar os recursos da CPU, envolvendo os subsistemas da CPU, cpuacct e cpuset. O compartilhamento de CPU é implementado com base no subsistema da CPU cpu.shares. As vantagens do compartilhamento de CPU são as seguintes: O controle da CPU não é acionado quando a CPU do sistema operacional não está totalmente ocupada. O limite de CPU é implementado com base no cpuset, que é um subsistema de CPU usado para monitorar o uso de recursos da CPU.

Ao adicionar um pool de recursos no console de gerenciamento do GaussDB(DWS), você deve escolher entre Share e Limit.

Compartilhamento de CPU

CPU Share: percentual de tempo de CPU que pode ser usado por usuários associados ao pool de recursos atual para executar trabalhos.

O compartilhamento tem dois significados:

  • Share: a CPU é compartilhada por todos os Cgroups, e outros Cgroups podem usar recursos de CPU ociosos.
  • Limit: quando a CPU está totalmente carregada durante as horas de pico, os Cgroups antecipam os recursos da CPU com base em seus limites.

O compartilhamento de CPU é implementado com base em cpu.shares e entra em vigor apenas quando a CPU está totalmente carregada. Quando a CPU está ociosa, não há garantia de que um Cgroup irá antecipar os recursos da CPU apropriados à sua cota. Ainda pode haver contenção de recursos quando a CPU está ociosa. Tarefas em um Cgroup podem usar recursos da CPU sem restrições. Embora o uso médio da CPU não seja alto, a contenção de recursos da CPU ainda pode ocorrer em um momento específico.

Por exemplo, 10 trabalhos estão sendo executados em 10 CPUs e um trabalho está sendo executado em cada CPU. Nesse caso, qualquer solicitação de trabalho para recursos da CPU será respondida instantaneamente e não há disputa. Se 20 trabalhos estiverem sendo executados em 10 CPUs, o uso da CPU ainda pode não ser alto porque os trabalhos nem sempre ocupam a CPU e podem esperar por recursos de I/O e de rede. Os recursos da CPU parecem ociosos. No entanto, se 2 ou mais trabalhos solicitarem uma CPU ao mesmo tempo, ocorrerá a contenção de recursos da CPU, afetando o desempenho do trabalho.

Limite de CPU

CPU Limit: especifica a porcentagem do número máximo de núcleos de CPU que podem ser usados por um usuário do banco de dados no pool de recursos.

O limite tem dois significados:
  • Dedicated: a CPU é dedicada a um Cgroup. Outros Cgroups não podem usar recursos de CPU ociosos.
  • Quota: somente os recursos da CPU na cota alocada podem ser usados. Os recursos de CPU ociosos de outros Cgroups não podem ser preempcionados.

O limite de CPU é implementado com base em cpuset.cpu. Você pode definir uma cota adequada para implementar o isolamento absoluto dos recursos da CPU entre Cgroups. Desta forma, as tarefas de diferentes Cgroups não afetarão umas às outras. No entanto, o isolamento absoluto da CPU fará com que os recursos da CPU ociosa em um Cgroup sejam desperdiçados. Portanto, o limite não pode ser muito grande. Um limite maior pode não trazer um melhor desempenho.

Por exemplo, em um caso, 10 trabalhos estão sendo executados em 10 CPUs e o uso médio da CPU é de cerca de 5%. Em outro caso, 10 trabalhos estão sendo executados em 5 CPUs e o uso médio da CPU é de cerca de 10%. De acordo com a análise anterior, embora o uso da CPU seja baixo quando 10 trabalhos são executados em cinco CPUs. No entanto, a contenção de recursos da CPU ainda existe. Portanto, o desempenho da execução de 10 trabalhos em 10 CPUs é melhor do que o da execução de 10 trabalhos em 5 CPUs. No entanto, não é quanto mais CPUs, melhor. Se dez trabalho forem executados em 20 CPUs, em qualquer ponto de tempo, pelo menos 10 CPUs ficarão ociosas. Portanto, teoricamente, executar 10 trabalhos em 20 CPUs não tem melhor desempenho do que executar 10 CPUs. Para um grupo C com uma simultaneidade de N, se o número de CPUs alocadas for menor que N, o desempenho do trabalho será melhor com mais CPUs. No entanto, se o número de CPUs alocadas for maior que N, o desempenho do trabalho não será melhorado com mais CPUs.

Cenários de aplicações do gerenciamento de recursos da CPU

O limite de CPU e o compartilhamento de CPU têm suas próprias vantagens e desvantagens. O compartilhamento de CPU pode utilizar totalmente os recursos da CPU. No entanto, os recursos de diferentes Cgroups não são completamente isolados, o que pode afetar o desempenho da consulta. O limite da CPU pode implementar o isolamento absoluto dos recursos da CPU. No entanto, os recursos de CPU ociosos serão desperdiçados. Em comparação com o limite de CPU, o compartilhamento de CPU tem maior uso de CPU e taxa de transferência geral de trabalhos. Comparado com o compartilhamento de CPU, o limite de CPU tem isolamento completo da CPU, o que pode atender melhor aos requisitos dos usuários sensíveis ao desempenho.

Se a disputa da CPU ocorrer quando vários tipos de trabalhos estiverem em execução no sistema de banco de dados, você poderá selecionar diferentes modos de controle de recursos da CPU com base em diferentes cenários.

  • Cenário 1: utilize totalmente os recursos da CPU. Concentre-se na taxa de transferência geral da CPU em vez do desempenho de um único tipo de trabalho.

    Sugestão: não é aconselhável isolar CPUs entre usuários. Não importa qual tipo de controle da CPU seja implementado, o uso geral da CPU é afetado.

  • Cenário 2: um certo grau de contenção de recursos da CPU e perda de desempenho são permitidos. Quando a CPU está ociosa, os recursos da CPU são totalmente utilizados. Quando a CPU está totalmente carregada, cada tipo de serviço precisa usar a CPU proporcionalmente.

    Sugestão: você pode usar o compartilhamento de CPU para melhorar o uso geral da CPU enquanto implementa o isolamento e o controle da CPU quando as CPUs estão totalmente carregadas.

  • Cenário 3: alguns trabalhos são sensíveis ao desempenho e o desperdício de recursos da CPU é permitido.

    Sugestão: você pode usar o limite de CPU para implementar o isolamento absoluto de CPU entre diferentes tipos de trabalhos.