Diagnostique e gerencie as conexões de uma instância do Hologres.
Gerenciamento de conexões e consultas
O Hologres é compatível com PostgreSQL. Consulte a view pg_stat_activity para inspecionar conexões e diagnosticar consultas em execução. Principais operações:
Consultar o número máximo padrão de conexões: Cada especificação de instância possui um limite padrão de conexões. Execute um comando para consultar o seu.
Gerenciar conexões no HoloWeb: Visualize, gerencie e encerre conexões ativas no console do HoloWeb.
Consultar conexões com SQL: Consulte a quantidade de conexões, verifique estados e encerre conexões ociosas.
Encerrar conexões: Use funções SQL para liberar recursos mantidos por conexões específicas.
Conexões reservadas para Superusers: Use conexões reservadas para tarefas de gerenciamento quando o limite de conexões for atingido.
Limitar conexões para um único usuário: Defina um limite de conexões por usuário para evitar o uso excessivo de recursos.
Encerrar automaticamente conexões ociosas: Feche automaticamente as conexões que permanecerem ociosas além de uma duração especificada.
Melhores práticas para uso de conexões: Recomendações para o gerenciamento eficiente de conexões no Hologres.
Consultar a view pg_stat_activity
A view pg_stat_activity fornece informações de tempo de execução sobre as conexões e consultas da instância. Execute o seguinte comando para consultá-la.
select * from pg_stat_activity ;
A tabela a seguir descreve os campos da pg_stat_activity.
|
Campo |
Descrição |
|
datid |
O ID do objeto (OID) do banco de dados ao qual o backend está conectado. |
|
datname |
O nome do banco de dados ao qual o backend está conectado. |
|
pid |
O ID do processo (PID) do backend do Hologres. |
|
usesysid |
O OID do usuário conectado ao backend do Hologres. |
|
usename |
O nome de usuário da conexão atual. |
|
application_name |
O tipo de aplicação cliente. Os tipos comuns de aplicação incluem:
|
|
client_addr |
O endereço IP do cliente. Este pode ser um endereço resolvido, e não o IP de source original. |
|
client_hostname |
O nome do host do cliente. |
|
client_port |
A porta do cliente. |
|
backend_start |
Hora em que o processo de backend foi iniciado. |
|
xact_start |
Hora de início da transação atual do processo.
|
|
query_start |
Hora de início da consulta atualmente ativa. Se o estado da conexão não for |
|
state_change |
Hora da última alteração do estado da conexão. |
|
wait_event_type |
O tipo de evento pelo qual o backend está aguardando, ou NULL se não houver nenhum. Os valores possíveis incluem:
|
|
wait_event |
O nome do evento de espera se o backend estiver aguardando no momento; caso contrário, NULL. |
|
state |
O estado atual da conexão. Os estados comuns incluem:
|
|
backend_xid |
O identificador de transação de nível superior do backend do Hologres. |
|
backend_xmin |
O horizonte xmin do backend atual. |
|
query |
A consulta mais recente no backend. Mostra a consulta em execução se state for |
|
backend_type |
O tipo de backend. Valores possíveis: autovacuum launcher, autovacuum worker, logical replication launcher, logical replication worker, parallel worker, background writer, client backend, checkpointer, startup, walreceiver, walsender, walwriter e componentes de execução de backend como PQE. Nota
O tipo |
Notas de uso
Apenas Superusers podem visualizar todas as conexões. Usuários padrão veem apenas as suas próprias.
Máximo padrão de conexões
O limite padrão de conexões varia conforme a especificação da instância. Execute os comandos a seguir para consultá-lo. Cada comando retorna o limite por nó FE. Multiplique pelo número de nós FE para obter o limite total da instância. As contagens de nós FE estão listadas em Gerenciamento de instâncias.
-
Consulte o máximo de conexões para toda a instância (Hologres V1.3.23 e posterior).
select instance_max_connections(); -
Consulte o máximo de conexões para um único nó FE. Multiplique pelo número de nós FE para obter o limite total da instância.
show max_connections;
Gerenciar conexões no HoloWeb
Visualize e gerencie conexões ativas no console do HoloWeb.
Faça login no console do HoloWeb. Conectar-se ao HoloWeb e executar consultas SQL.
Na barra de navegação superior, clique em Diagnostics and Optimization.
No painel de navegação à esquerda, clique em Connections.
-
Na página Connections, configure os parâmetros para visualizar as conexões e informações relacionadas da sua instância.
NotaApenas Superusers podem visualizar todas as conexões. Usuários padrão veem apenas as suas próprias.
A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
Instance name
O nome da instância do Hologres.
Database
O banco de dados do Hologres. Deixe em branco para exibir conexões de todos os bancos de dados.
Database
O nome do banco de dados conectado.
NotaSe o nome do banco de dados for Postgres, isso indica uma conexão de manutenção de backend, que pode ser ignorada.
User Name
A conta de usuário da conexão.
Client Address
Este pode ser um endereço IP de saída roteado, e não o IP de source original.
Application Name
O nome da aplicação que criou a conexão.
State
O estado da conexão. Os estados comuns incluem:
-
active: A conexão está ativa.
-
idle: A conexão está ociosa.
-
idle in transaction: A conexão está ociosa dentro de uma transação de longa duração.
-
idle in transaction (Aborted): A conexão está ociosa dentro de uma transação com falha.
Query Start
A hora de início da consulta.
Query
A consulta executada.
NotaConsultas longas podem ser truncadas.
PID
O ID do processo (PID) da consulta.
Operation
-
Kill: Encerre conexões inesperadas individualmente ou em lotes.
-
Details: Clique em para visualizar informações detalhadas sobre a conexão.
-
Consultar conexões com SQL
Use as instruções SQL a seguir para consultar informações de conexão.
-
Consulte o número de conexões com o banco de dados atual.
Execute os comandos a seguir para visualizar a contagem de conexões do banco de dados atual. As descrições dos campos estão em Consultar a view pg_stat_activity.
-
Para Hologres V1.1 e posterior:
SELECT datname::TEXT ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname::TEXT; -
Para Hologres V0.10 e anterior:
SELECT datname ,COUNT(1) AS COUNT FROM pg_stat_activity WHERE backend_type = 'client backend' AND application_name != 'hologres' GROUP BY datname;
-
-
Visualize o estado de cada conexão.
Use o HoloWeb no console do Hologres para visualizar o status das conexões ou execute a instrução a seguir para consultar todos os estados de conexão JDBC ou PSQL.
select * from pg_stat_activity where backend_type = 'client backend' and state = '<statename>';Substitua
<statename>por um dos seguintes estados:idle: O processo está aguardando novos comandos do cliente.
active: Uma conexão ativa, onde o processo está executando uma consulta.idle in transaction: O processo está em uma transação, mas não está executando uma consulta no momento.idle in transaction (aborted): O processo está em uma transação com falha e não está executando uma consulta no momento.fastpath function call: Indica que um processo está executando uma função
fast-path.disabled: Indica que o rastreamento de atividades (
track activities) para o processo está desativado.
Por exemplo, consulte conexões ociosas:
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';Componentes do Hologres, como o HoloWeb, usam JDBC e consomem conexões. Se a contagem se aproximar consistentemente de
max_connections, verifique se há vazamentos de conexão na sua aplicação e configure um pool de conexões adequado. Liberar conexões. -
Visualize o número de conexões em cada nó de acesso.
Consulte a contagem de conexões em cada nó FE (Hologres V1.3.23 e posterior). Nós FE sem conexões ativas são omitidos dos resultados.
select * from hologres.hg_connections;A tabela a seguir descreve os campos no resultado da consulta.
fe_id: O ID do nó FE.used_connections: O número de conexões atualmente em uso no nó FE.max_connections: O número máximo de conexões para um nó FE, que corresponde ao valor retornado pelo comando
show max_connections.
Encerrar conexões
Os sintomas a seguir indicam que o limite de conexões foi atingido:
A contagem de conexões atinge ou excede
max_connections, conforme mostrado na página Monitoring and Alarms no console do Hologres.Ocorre o erro
FATAL: sorry, too many clients already connection limit exceeded for superusers.É reportado o erro
FATAL: remaining connection slots are reserved for non-replication superuser connections.
Para resolver esses problemas, conecte-se com uma conta Superuser e execute a instrução a seguir para verificar se há conexões ociosas.
select * from pg_stat_activity where backend_type = 'client backend' and state = 'idle';
Se os resultados mostrarem processos ociosos excessivos, use o pid dos resultados para liberar conexões com as instruções a seguir. As descrições dos campos estão em Consultar a view pg_stat_activity.
select pg_cancel_backend(<pid>); -- Cancels the query on the connection.
select pg_terminate_backend(<pid>); -- Terminates the corresponding backend connection process.
-- Terminate backend IDLE connection processes in a batch to release connections.
SELECT pg_terminate_backend(pid)
,query
,datname
,usename
,application_name
,client_addr
,client_port
,backend_start
,state
FROM pg_stat_activity
WHERE length(query) > 0
AND pid != pg_backend_pid()
AND backend_type = 'client backend'
AND state = 'idle'
AND application_name != 'hologres'
AND query not like '%pg_cancel_backend%';
Conexões reservadas para Superusers
O Hologres reserva conexões para Superusers; a quantidade varia conforme a especificação da instância (Gerenciamento de instâncias). Essas conexões permitem tarefas de gerenciamento, como encerrar conexões ociosas quando o limite é atingido. Usuários padrão podem usar max_connections menos a contagem reservada. Não utilize contas Superuser para operações regulares — isso pode esgotar todas as conexões e bloquear o acesso administrativo.
Limites de conexão por usuário
Definir um limite de conexão por usuário
Defina um limite de conexões por usuário para evitar consumo excessivo de recursos.
Execute a instrução a seguir para limitar as conexões de um usuário em um único nó de acesso. Para instâncias com múltiplos nós, o limite total é (connections per node) * (number of nodes).
-
Sintaxe
ALTER ROLE "Alibaba Cloud account ID" CONNECTION LIMIT <number>; -
Parâmetros
Parâmetro
Descrição
Alibaba Cloud account ID
O ID da conta a ser limitada. Para um usuário RAM, adicione o prefixo
p4_ao UID da conta.number
O limite de conexões.
O valor deve estar no intervalo [-1, N]. Um valor de -1 remove o limite de conexões do usuário.
-
Exemplo
Este exemplo limita o usuário RAM
283813xxxxa uma conexão por nó.ALTER ROLE "p4_283813xxxx" CONNECTION LIMIT 1;
Visualizar limites de conexão por usuário
Execute a instrução a seguir para visualizar os limites de conexão por nó para os usuários da instância.
SELECT rolname, rolconnlimit
FROM pg_roles
WHERE rolconnlimit <> -1;
Exemplo de resultado da consulta:
rolname | rolconnlimit
---------------+--------------
p4_283813xxxx | 1
(1 row)
Encerrar automaticamente conexões ociosas
Se as conexões da instância se aproximarem consistentemente do limite, sua aplicação pode ter vazamentos de conexão. Ative o encerramento automático de conexões ociosas para liberar recursos. Conexões que permanecerem ociosas além da duração especificada serão desconectadas automaticamente.
-
Limitações
Suportado no Hologres V0.10.25 e posterior. Para versões anteriores, consulte Erros comuns durante uma atualização ou entre no grupo DingTalk do Hologres para solicitar uma atualização. Como obter mais suporte online?
-
Sintaxe
-
Nível de sessão
-- Automatically disconnect a connection if it has been idle for 10 minutes (600,000 milliseconds). SET idle_session_timeout = 600000; -
Nível de banco de dados
-- Automatically disconnect connections to this database if they have been idle for 10 minutes (600,000 milliseconds). ALTER DATABASE <db_name> SET idle_session_timeout = 600000;Substitua
<db_name>pelo nome do banco de dados para o qual você deseja ativar o encerramento automático de conexões ociosas.
-
Melhores práticas de conexão
Siga estas melhores práticas para utilizar conexões do Hologres.
-
Utilize a conta Superuser com cautela
Não use contas Superuser para conexões de aplicações ou operações regulares. Se as conexões excederem o limite, até mesmo Superusers podem ficar impossibilitados de se conectar.
Crie uma conta Superuser dedicada para emergências, como esgotamento do limite de conexões ou consultas travadas.
-
Configure um pool de conexões adequado
Por padrão, o Hologres não encerra conexões ociosas automaticamente. Utilize um pool de conexões para liberar conexões ociosas prontamente.
Limpe periodicamente as conexões ociosas para liberar recursos.
Erros comuns
Uma mensagem de erro é retornada durante a execução de SQL:
terminating connection due to idle state timeout.Causa: A conexão foi encerrada automaticamente porque excedeu o tempo limite de ociosidade configurado.
Solução: Reconecte-se à instância ou aumente o tempo limite de conexão ociosa. Para obter informações sobre como modificar o tempo limite de conexão ociosa, consulte Encerrar automaticamente conexões ociosas.