Como matar conexões ociosas no PostgreSQL

Como matar conexões ociosas no PostgreSQL

O primeiro passo para fazer alterações ou ler algumas informações de um banco de dados PostgreSQL é estabelecer conexões. Por outro lado, cada link gerou sobrecarga utilizando procedimento e armazenamento. É por isso que um dispositivo com recursos mínimos (leitura, armazenamento, hardware) pode suportar o agregado limitado de conexões. Uma vez que o agregado limitado tenha ido muito além de um ponto, ele deve continuar lançando erros ou negando conexões. PostgreSql.Conf, PostgreSQL está fazendo um trabalho decente de limitar links. Neste tutorial, examinaremos as diferentes formas de estados que os links postgreSQL podem ter. Mostraremos como determinar se o link está ativo ou está inativo por uma longa duração, em que o caso pode ser desconectado para liberar os links e recursos.

Conecte-se ao servidor:

No início, verifique se você tem pgadmin4 foi totalmente funcional instalado em seu sistema de computador. Abra -o de seus aplicativos. Você tem que conectá -lo com o host local, fornecendo uma senha.

Após a conectividade com a raiz localhost, conecte -a ao servidor PostgreSQL. Digite a senha para o Postql 13 User 'Postgres para conectar -se. Toque no botão OK para prosseguir.

Agora você está conectado ao servidor PostgreSQL 13. Você pode ver uma lista de bancos de dados residentes no servidor, conforme apresentado na figura anexada abaixo. O banco de dados do Postgres é o banco de dados padrão 'criado no momento da instalação do PostGresql, enquanto o banco de dados' Test 'foi criado por um usuário depois da instalação.

Estados de conexão:

Se um link postgreSQL for estabelecido, poderá executar várias ações que resultam em transições de estado. Deve -se tomar uma decisão racional sobre se o link está funcionando ou ficou ocioso/não utilizado, dependendo do estado e da duração em que esteve em cada estado. É importante observar que até que o aplicativo feche deliberadamente a conexão, ele continuará operando, desperdiçando recursos muito tempo depois que o cliente é destacado. Existem os 4 estados em potencial para uma conexão:

  • Ativo: Isso significa que o link está em funcionamento.
  • Parado: Isso significa que o link está inativo, então devemos manter um registro deles, dependendo de quanto tempo eles estão ociosos.
  • Ocioso (em transação): Isso significa que o back -end está envolvido em uma consulta, embora esteja realmente ocioso e talvez esperando a contribuição do cliente final.
  • Ocioso na transação (abortada): Esta condição é equivalente a ociosa no processo. No entanto, uma das declarações culminou em um erro. Pode ser rastreado dependendo de quanto tempo está ocioso.

Identifique os estados da conexão:

As tabelas de catálogo PostGresql fornecem uma exibição interna 'PG_STAT_ACTIVIDADE' para verificar as estatísticas sobre o que um link faz ou quanto tempo ele tem nessa condição. Para verificar todas as estatísticas sobre todos os bancos de dados e todos os estados de conexão, abra a ferramenta de consulta e execute a consulta abaixo:

>> Selecione * em PG_STAT_ACTIVIDADE;

A consulta foi implementada frutamente, e a nota de realização foi mostrada.

Quando você verifica o lado da saída de dados, você encontrará uma tabela com várias colunas, como mostrado abaixo. Você pode verificar os estados das conexões, verificando os valores do 'estado' do campo.

Para simplificar a saída e ter uma idéia clara de conexões, seus estados, usuários e servidores nesses estados, você deve executar a consulta abaixo modificada na ferramenta de consulta. Esta consulta está apenas mostrando os 5 campos de registros para conexões e dados específicos sobre eles. A coluna 'PID' significa ID do processo. O 'estado' da coluna detém os estados dos processos. O 'nome de usename' da coluna identifica o usuário que está trabalhando no processo específico. A coluna 'DatName' especificou o nome do banco de dados no qual a transação está executando. A coluna 'datid' significa ID do banco de dados.

>> selecione PID, estado, usename datName, datid, de pg_stat_activity;

A saída tem um total de 8 processos registrados. A coluna 'Estado' mostra que existem apenas 3 processos funcionando agora. Um é mantido pelo banco de dados padrão 'Postgres e os outros dois são mantidos pelo banco de dados' teste '. Ao mesmo tempo, o usuário 'Postgres tem executado esses processos.

Identifique as conexões ociosas:

O "estado" parece ser o único valor que estamos procurando dentro dos resultados mencionados acima. Usaremos essas informações para determinar quais processos ou consultas estão em que estados e depois me aprofundam. Podemos diminuir os detalhes que estamos procurando refinando a consulta, permitindo -nos preparar uma intervenção nessa conexão específica. Poderíamos fazer isso escolhendo apenas os PIDs ociosos usando a cláusula onde e os estados para aqueles PIDs. Também devemos acompanhar quanto tempo o link está inativo e garantir que não tenhamos links negligenciados desperdiçando nossos recursos. Como resultado, usaremos o comando abaixo-reproduzido para exibir apenas registros relevantes para os processos que estão ociosos atualmente:

>> Selecione PID, USENAME, UsaSYSID, DATID, DATNAME, APLICAÇÃO_NAME, Backend_Start, State_Change, Estado de PG_STAT_ACTIVIDADE WHERE STATE = 'IDLE';

A consulta buscou apenas 2 registros de dados em que o estado estava 'ocioso' usando a cláusula onde. O resultado está mostrando os 2 processos ociosos com certas informações sobre eles.

Mate uma conexão ociosa:

Após a identificação de conexões ociosas, agora um tempo para matá -las. Depois que diminuímos o processo em um estado de espera ou inativo por muito mais tempo, poderíamos usar o comando simples para encerrar facilmente o mecanismo de back-end sem interromper as atividades do servidor. Temos que fornecer o processo 'ID' dentro da consulta em uma função de rescisão.

>> selecione PG_TERMINATE_BACKEND (7408);

O processo foi magnificamente morto.

Agora verifique as conexões ociosas restantes da consulta abaixo recaiu.

>> Selecione DATID, USENAME, DATNAME, PID, Estado de PG_STAT_ACTIVIDADE WHERE STATE = 'IDLE';

A saída mostra apenas 1 processo restante, que está ocioso.

Conclusão:

Certifique -se de não perder nenhum passo para matar as conexões inativas do banco de dados PostgreSQL com eficiência.