Identificando processos responsáveis por consultas com client_port == - 1 em pg_stat_activity

2

Estou tentando rastrear a origem de consultas postgres identificadas por um pid. Normalmente, você pode fazer isso localizando os campos client_addr e client_port na tabela pg_stat_activity.

No entanto, algumas entradas têm client_port -1 ou NULL. O que isso significa e como se pode encontrar a fonte dessas consultas?

Acho que as portas NULL indicaram que esta é uma operação postgres interna e suspeitei que -1 significava conexões locais - mas não consegui descobrir como as conexões locais se comunicavam com o daemon postgres.

    
por user53597 07.09.2010 / 20:10

2 respostas

1

Eu encontrei um truque de mágica que parece funcionar. Pelo menos em uma máquina linux do ubuntu em particular.

Execute o lsof no backend postgres e encontre um socket unix assim:

postgres   6571 postgres    8u     unix 0xffff81061ab3a000              205980094 /var/run/postgresql/.s.PGSQL.5432

O valor 205980094 é o inode. Embora o soquete unix do cliente conectando-se a este soquete seja anônimo, e você não pode convencer o lsof no linux para informar o ponto final dos soquetes unix, ele é criado na mesma hora que o soquete do backend. Então, parece ter um número inode que geralmente é adjacente a esse número.

Executando lsof em todo o sistema, restrição para sockets unix (usando grep), e então ordenar por essa chave ( sort -k 7 -n ) deve informar o processo responsável pela consulta.

    
por 18.09.2010 / 19:46
0

Essas são conexões através de conexões unix locais, sim. Eles passarão por um soquete que está em / tmp em uma instalação de origem ou em um local como / var / run / postgresql se você estiver usando a instalação baseada em pacote.

Deve ser possível encontrar o processo do cliente usando, por exemplo, lsof.

    
por 08.09.2010 / 19:56