Todos os produtos
Search
Central de documentação

PolarDB:Multitenância

Última atualização: Aug 20, 2026

Este tópico descreve o recurso de configuração de recursos multitenant do PolarDB for PostgreSQL.

Conceitos

Tenant: Na multitenância, um tenant é uma entidade lógica que representa uma unidade específica de alocação de dados e recursos. A hierarquia do tenant situa-se abaixo do cluster e acima dos usuários e bancos de dados. A relação entre eles é de muitos para um: várias contas ou bancos de dados correspondem a um único tenant. Um tenant não equivale a um usuário ou a um banco de dados. Os tenants dividem-se em duas categorias:

  • System tenant: Entidade especial de gerenciamento, geralmente única. O system tenant tem acesso prioritário aos recursos e pode ocupar os recursos dos tenants regulares. Ao conectar-se a um banco de dados como usuário do system tenant, se esse usuário possuir as permissões de acesso ao cluster correspondentes, ele poderá acessar o cluster em todos os tenants.

  • Regular tenant: Os recursos de cada regular tenant são completamente isolados, e os tenants não podem acessar uns aos outros. Crie um regular tenant no contexto do system tenant.

Configuração de recursos: A configuração de recursos envolve a alocação de recursos específicos (como CPU e memória) para um tenant específico. Esse método permite que contas privilegiadas especifiquem limites de recursos para cada tenant conforme os requisitos de negócios.

O recurso de configuração de recursos do tenant visa limitar a quantidade de recursos utilizados por um ou mais processos. No PolarDB for PostgreSQL, uma sessão corresponde a um processo, e uma sessão pode ser iniciada em apenas um banco de dados por um único usuário. Portanto, processos, usuários e bancos de dados constituem os elementos básicos de um processo. O sistema permite mapear qualquer processo, usuário ou banco de dados para um tenant especificado, mas um processo pode pertencer a apenas um tenant, evitando assim estatísticas duplicadas de uso de recursos. Os processos filhos de uma consulta paralela em segundo plano pertencem ao tenant do processo que iniciou a consulta. Assim, com base nos atributos dos processos, os limites de recursos dividem-se em três dimensões:

  • Processo: Refere-se aos processos de conexão de conta (processos de sessão) iniciados ativamente pelos usuários, incluindo os processos de consulta paralela relacionados, mas excluindo os processos auxiliares do sistema.

  • Usuário: Abrange todos os processos de conexão de usuário (processos de sessão) iniciados pelo mesmo usuário, incluindo os processos de consulta paralela relacionados, mas excluindo os processos auxiliares do sistema.

  • Banco de dados: Corresponde a todos os processos de conexão de usuário (processos de sessão) que acessam o mesmo banco de dados, incluindo os processos de consulta paralela relacionados, mas excluindo os processos auxiliares do sistema.

Nota

Devido à função específica dos processos do sistema, o uso de recursos por eles não é limitado por padrão.

Escopo de aplicação

As versões suportadas do PolarDB for PostgreSQL são as seguintes: PostgreSQL 14, e a versão secundária do mecanismo deve ser 2.0.14.12.24.0 ou posterior.

Nota

Você pode visualizar a versão secundária do mecanismo no console ou executando a instrução SHOW polardb_version;. Se a versão secundária do mecanismo não atender aos requisitos, atualize a versão secundária do mecanismo.

Descrição dos parâmetros

Parâmetro

Descrição

Método de efetivação

polar_max_tenants

Número máximo de tenants. Valores válidos: 0 a 65.536. Valor padrão: 32.

Entra em vigor após reinicialização.

polar_resource_manager.enable_resource_manager

Especifica se o processo Resource Manager deve ser ativado para limitação de memória e prevenção de OOM. Valor padrão: on.

Entra em vigor após reinicialização.

polar_resource_manager.database_name

Nome do banco de dados que armazena os metadados do tenant. Valor padrão: polardb_admin.

Entra em vigor após reinicialização.

polar_resource_manager.stat_interval

Intervalo de coleta de dados, em milissegundos. Valores válidos: 10 a 10.000. Valor padrão: 500 ms.

Entra em vigor após RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_request_rate

Limiar de evicção ativa. Valores válidos: 50% a 100%. Valor padrão: 80%.

Entra em vigor após RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_rate

Limiar de evicção forçada. Valores válidos: 50% a 100%. Valor padrão: 95%.

Entra em vigor após RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.total_mem_limit_remain_size

Tamanho da memória reservada. Valores válidos: 131.072 a INT_MAX (valor máximo do tipo de dados inteiro), em KB. Valor padrão: 256.000 KB.

Entra em vigor após RELOAD.

SELECT pg_reload_conf();

polar_resource_manager.enable_log

Especifica se o registro de logs deve ser ativado. Valores válidos:

  • ON (padrão): ativa o registro de logs.

  • OFF: desativa o registro de logs.

Entra em vigor após RELOAD.

SELECT pg_reload_conf();

Notas de uso

Ao utilizar a multitenância, instale a extensão polar_resource_manager no banco de dados especificado pelo parâmetro polar_resource_manager.database_name.

Importante

Se você alterar o nome do banco de dados especificado por polar_resource_manager.database_name para armazenamento dos metadados do tenant, as informações de multitenância configuradas anteriormente tornar-se-ão inválidas.

CREATE EXTENSION polar_resource_manager;

Criar uma configuração de recursos

Use a função polar_create_resource_config para criar uma configuração de recursos.

SELECT polar_resource_manager.polar_create_resource_config('resource_config_name');

O parâmetro resource_config_name deve obedecer às restrições de nomenclatura de objetos de banco de dados. Apenas nomes com até 64 bytes são suportados. Nomes superiores a 64 bytes são truncados automaticamente.

Excluir uma configuração de recursos

Use a função polar_drop_resource_config para excluir uma configuração de recursos.

SELECT polar_resource_manager.polar_drop_resource_config('resource_config_name');

Modificar uma configuração de recursos

Use a função polar_alter_resource_config para modificar as definições de recursos de uma configuração.

SELECT polar_resource_manager.polar_alter_resource_config('resource_config_name', 'config_name', value);

Os tipos de config_name suportados são:

  • cpu_rate_limit: Valor limite de CPU, em número de núcleos.

  • mem_limit: Valor limite de memória, em bytes.

Criar um tenant

Use a função polar_create_tenant para criar um tenant.

SELECT polar_resource_manager.polar_create_tenant('tenant_name', 'resource_config_name');

Onde:

  • O parâmetro tenant_name deve obedecer às restrições de nomenclatura de objetos de banco de dados. Apenas nomes com até 64 bytes são suportados. Nomes superiores a 64 bytes são truncados automaticamente.

  • Crie previamente a configuração de recursos resource_config_name. Caso contrário, o tenant não poderá ser criado.

Excluir um tenant

Use a função polar_drop_tenant para excluir um tenant. A exclusão de um tenant não remove a configuração de recursos associada.

SELECT polar_resource_manager.polar_drop_tenant('tenant_name');

Modificar um tenant

Use a função polar_alter_tenant para modificar um tenant.

SELECT polar_resource_manager.polar_alter_tenant('tenant_name', 'config_name', 'value');

Os tipos de config_name suportados são:

  • name: Nome do tenant.

  • resource_config: Configuração de recursos.

Atribuir um banco de dados a um tenant

Use a função polar_tenant_add_database para atribuir um banco de dados a um tenant. Um banco de dados pode ser atribuído a apenas um tenant. Caso contrário, a atribuição falhará.

SELECT polar_resource_manager.polar_tenant_add_database('tenant_name', 'database_name');

Visualize bancos de dados e tenants

Use a view polar_tenants_dbs para visualizar os bancos de dados e os tenants aos quais pertencem.

SELECT dbsname, tenantname FROM polar_resource_manager.polar_tenants_dbs;

Atribuir um usuário a um tenant

Use a função polar_tenant_add_user para atribuir um usuário a um tenant. Um usuário pode ser atribuído a apenas um tenant. Caso contrário, a atribuição falhará.

SELECT polar_resource_manager.polar_tenant_add_user('tenant_name', 'user_name');

Visualize usuários e tenants

Use a view polar_tenants_users para visualizar os usuários e os tenants aos quais pertencem.

SELECT username, tenantname FROM polar_resource_manager.polar_tenants_users;

Atribuir um processo a um tenant

Use a função polar_tenant_add_process para atribuir um processo a um tenant. Um processo pode ser atribuído a apenas um tenant. Quando um processo é atribuído a múltiplos tenants, a última atribuição prevalece.

SELECT polar_resource_manager.polar_tenant_add_process('tenant_name', pid);

Visualize o status de recursos do tenant

Use a view polar_all_resource_configs_detail para visualizar o status de recursos do tenant.

SELECT * FROM polar_resource_manager.polar_all_resource_configs_detail;

As informações da view são as seguintes:

Nome da coluna

Tipo da coluna

Descrição

tenantname

NAME

Nome do tenant.

resource_config_name

NAME

Nome da configuração de recursos.

num_processes

INTEGER

Quantidade de processos.

num_idle_processes

INTEGER

Quantidade de processos ociosos.

num_active_processes

INTEGER

Quantidade de processos ativos.

cpu_rate_limit

DOUBLE PRESISION

Valor limite de recursos de CPU do tenant.

per_process_cpu_rate_limit

DOUBLE PRESISION

Valor limite de CPU por processo.

mem_limit

DOUBLE PRESISION

Valor limite de memória.

mem_usage

DOUBLE PRESISION

Uso de memória.

idle_processes_mem_usage

DOUBLE PRESISION

Uso de memória pelos processos ociosos.

active_processes_mem_usage

DOUBLE PRESISION

Uso de memória pelos processos ativos.

cpu_usage_rate

DOUBLE PRESISION

Uso de CPU.

Gerenciamento de recursos de CPU

Após adicionar processos, usuários ou bancos de dados ao tenant correspondente, defina os valores limite relacionados à CPU na configuração de recursos do tenant. Se houver processos filhos de backend alocáveis, estes serão adicionados ao tenant da conexão de sessão que emite a consulta paralela, permitindo que os processos filhos e o processo de sessão compartilhem os recursos limitados pelo tenant. Quando a execução da consulta paralela da sessão termina, os processos filhos são removidos do tenant. Trata-se de um processo dinâmico de adição e remoção de limites de recursos.

Limite de uso de CPU

Limita o uso máximo de CPU dos objetos dentro de um tenant. Quando o uso de CPU de um objeto dentro de um tenant é excessivo, o cluster impõe restrições e reduz o uso para abaixo do valor limite.

Use polar_resource_manager.polar_alter_resource_config para definir cpu_rate_limit. O valor do parâmetro é do tipo float.

Nota

O valor do parâmetro representa o uso da CPU (a razão do tempo de uso da CPU durante um período). Por exemplo, 0,3 representa o uso de 30% de um núcleo, e 2 representa o uso da capacidade de dois núcleos. Como o limite refere-se ao uso máximo, a soma dos valores cpu_limit de todas as configurações de recursos dos tenants pode ser maior que a cota de especificação T, ou seja, cpu_limit_A + cpu_limit_B + cpu_limit_C + ... >= T.

Gerenciamento de recursos de memória

Como os recursos de memória são recursos rígidos (swap off), eles não podem ser limitados dinamicamente como a CPU. Se os recursos de memória excederem o limite rígido, a liberação de recursos geralmente ocorre mediante a interrupção de processos. O gerenciamento de memória do tenant assemelha-se à estratégia de tratamento de OOM de um sistema operacional. Em comparação com o tratamento de OOM no nível de banco de dados do sistema, este é apenas um tratamento de OOM no nível de tenant.

Limite de uso de memória

Use polar_resource_manager.polar_alter_resource_config para definir mem_limit. O valor do parâmetro é do tipo float. Assim como o limite de uso de CPU, serve para limitar o valor máximo de uso de memória. O valor total do limite pode ser maior ou igual à cota de especificação. Estão incluídas as duas estratégias a seguir:

  • Gerenciamento ativo de excesso de recursos: Quando o uso total de memória supera o limiar de evicção ativa (total_mem_request_rate, valor padrão 80%), se o uso de memória de um tenant for maior que o limite de memória da configuração de recursos desse tenant, os recursos da sessão correspondente são liberados e um erro de excesso de memória é retornado ao usuário. Isso continua até que o uso de memória fique abaixo do limiar de evicção ativa.

  • Gerenciamento forçado de excesso de recursos: Para evitar que o uso excessivo de memória do cluster cause OOM no cluster, quando o uso total de memória supera o limiar de evicção forçada (total_mem_limit_rate, valor padrão 95%), todos os processos são percorridos, os recursos das sessões correspondentes são liberados e um erro de excesso de memória é retornado ao usuário.

Quando os limites de memória executam a evicção, as sessões do usuário são interrompidas e os recursos do processo são liberados. Isso pode ser implementado enviando SIGUSR2 para retornar o erro OOM especificado ao usuário. Se a memória de um processo em segundo plano de uma consulta paralela exceder o limite, o processo de usuário correspondente será interrompido. Atualmente, apenas os processos de usuário são limitados. Os processos em segundo plano do sistema pertencem atualmente ao system tenant e não são interrompidos ativamente para liberar recursos.