Freqüentemente o administrador de banco de dados deseja saber, "O que o sistema está fazendo agora?". Este capítulo explica como descobrir isto.
Estão disponíveis várias ferramentas para monitorar a atividade do banco de dados e analisar o desempenho. A maior parte deste capítulo dedica-se a descrever o coletor de estatísticas do PostgreSQL, mas não se deve desprezar os programas regulares de monitoramento do Unix, como ps, top, iostat e vmstat. Também, uma vez que tenha sido identificado um comando com baixo desempenho, podem ser necessárias outras investigações utilizando o comando EXPLAIN do PostgreSQL. A Seção 13.1 discute o comando EXPLAIN e outros métodos para compreender o comportamento individual de um comando.
O PostgreSQL modifica, na maioria das plataformas, o seu título de comando mostrado pelo ps de forma que os processos servidor individuais possam ser prontamente identificados. Um exemplo do que é mostrado é:
$ ps auxww | grep ^postgres postgres 960 0.0 1.1 6104 1480 pts/1 SN 13:17 0:00 postmaster -i postgres 963 0.0 1.1 7084 1472 pts/1 SN 13:17 0:00 postgres: stats buffer process postgres 965 0.0 1.1 6152 1512 pts/1 SN 13:17 0:00 postgres: stats collector process postgres 998 0.0 2.3 6532 2992 pts/1 SN 13:18 0:00 postgres: tgl runbug 127.0.0.1 idle postgres 1003 0.0 2.4 6532 3128 pts/1 SN 13:19 0:00 postgres: tgl regression [local] SELECT waiting postgres 1016 0.1 2.4 6532 3080 pts/1 SN 13:19 0:00 postgres: tgl regression [local] idle in transaction
A forma apropriada para chamar o ps varia entre plataformas diferentes, assim como os detalhes mostrados. Este exemplo foi tirado de um sistema Linux recente. O primeiro processo listado neste exemplo é o postmaster, o processo servidor mestre. Os argumentos do comando mostrados são os mesmos fornecidos quando o postmaster foi ativado. Os dois processos seguintes implementam o coletor de estatísticas, que será descrito em detalhes na próxima seção (Não estão presentes quando o sistema é configurado para não ativar o coletor de estatísticas). Cada um dos demais processos é um processo servidor tratando uma conexão cliente. Cada um destes processos define a exibição da sua linha de comando na forma:
postgres: usuário banco_de_dados hospedeiro atividade
Os itens usuário, banco de dados e hospedeiro originais da conexão permanecem o mesmo durante toda a existência da conexão cliente, mas o indicador de atividade muda. [1] [2] A atividade pode ser idle (ou seja, ociosa, aguardando por um comando do cliente), idle in transaction (aguardando pelo cliente dentro de um bloco BEGIN), ou o nome de um tipo de comando como SELECT. Além disso, é anexado waiting se o processo servidor estiver aguardando no momento por um bloqueio mantido por outro processo servidor. No exemplo acima pode ser inferido que o processo 1003 está aguardando o processo 1016 completar sua transação e, portanto, liberar algum bloqueio.
Dica: O Solaris requer tratamento especial. Deve ser utilizado /usr/ucb/ps em vez de /bin/ps. Também devem ser utilizados dois sinalizadores w, e não apenas um. Além disso, a chamada original do comando postmaster deve possuir um status exibido pelo ps mais curto que o exibido por cada processo servidor. Se estas três coisas não forem feitas, a saída do ps para cada processo servidor será a linha de comando original do postmaster.
[1] |
A conexão com um outro banco de dados, ou por outro usuário, fecha a conexão existente e cria uma nova conexão com outro identificador de processo. (N. do T.) |
[2] |
O pgpool é um servidor de pool de conexões para o PostgreSQL, que executa entre os clientes do PostgreSQL e os processos servidor. O cliente do PostgreSQL se conecta ao pgpool como se este fosse um servidor PostgreSQL padrão. Quando se usa o pgpool é monitorado o pool, e não um determinado cliente. (N. do T.) |