On 09/26/2013 07:57 PM, Matheus de Oliveira wrote:



2013/9/26 Adriano Espinoza de Oliveira <adrianoespin...@gmail.com <mailto:adrianoespin...@gmail.com>>

    Boa tarde pessoal.


Boa noite... =D


    Hje de manhã tivemos "too many clients" no banco, eu não esta na
    empresa, e o adm de redes foi lá e derrubou um monte de conexões
    do postgres que ele achou q eram antigas...


Bom, a alguns anos atrás, fiz isso também, se não me engano também era na versão 8.x (não lembro exato porque faz tempo, talvez seja a 7.x).

Derrubou como? Se foi um "kill -9" é bom dar um "kill -9 `pidof cara_que_fez_isso`"... =P


Estou brincando viu, vamos lá ...

    O banco ficou inacessível, ele fez um restart do banco, que não
    subiu. Teve que apagar o PID na unha e depois o banco subiu...


Ok. Normal...


    Depois disso, quando cheguei, notei que o banco estava se
    derrubando e subindo sozinho, exibindo essas mensagens:

    * 2013-09-26 12:09:25 BRT [18539]: [1-1] db=,user= LOG:  server
    process (PID 23040) was terminated by signal 6*
    * 2013-09-26 12:09:25 BRT [18539]: [2-1] db=,user= LOG:
     terminating any other active server processes*
    *10.11.0.2 2013-09-26 12:09:25 BRT [23043]: [3-1]
    db=cimed,user=postgres WARNING:  terminating connection because of
    crash of another server process*
    *(...)*


E tive um problema muito parecido... como falei, não consigo precisar, faz muito tempo... A solução que eu tive foi que achei um script em um post falando do problema e que o mesmo resolveria isso, olhei o script e rodei o mesmo. resolveu o meu problema.

Como um velho conhecido meu fala, o kill é o ultimo do ultimo caso. Já que você deve ter conexões reservadas ao postgres, e o mesmo consegue matar conexão por dentro do banco.

Mais não é o caso agora... vou tentar achar aqui a situação que tive e a solução exata, se eu achar eu posto.

Essas mensagens querem dizer que um dos backends do PostgreSQL terminou e os demais pararam também pelo fato deste poder ter corrompido a memória compartilhada.



    Quando subia, esse era o log:

    *(...)*

    e sempre precedido dessas msg´s ( note que tive varias ocorrencias
    dela)

    *10.11.0.2 2013-09-26 12:09:24 BRT [23040]: [3-1]
    db=cimed,user=postgres PANIC:  right sibling's left-link doesn't
    match*
    *(...)*
    *10.11.0.2 2013-09-26 15:05:46 BRT [3063]: [15-1]
    db=cimed,user=postgres PANIC:  right sibling's left-link doesn't
    match*
    *
    *


Ok. Aqui parece que temos o problema: algum(ns) índice(s) corrompido(s)...


    *além da informação de roll back das transações: *
    *
    10.11.0.2 2013-09-26 17:25:11 BRT [11831]: [4-1]
    db=nutracom,user=visao DETAIL:  The postmaster has commanded this
    server process to roll back the current transaction and exit,
    because another server process exited abnormally and possibly
    corrupted shared memory.
    (...)

    *

Normal...


    Pesquisando, vi que poderia ser corrupção de indices...

    Derrubei o banco, limitei o acesso dos usuários, e executei o
    reindex de todas as tabelas em lote, com script.


Como? Reindexou TODAS as bases?

    Durante esse processo, tive o mesmo problema duas vezes, qdo o
    indice chegou numa determinada tabela, ao invés de executar o
    script em lote, fiz tabela a tabela, e passou do ponto que dava erro.

    O reindex de todas as tabelas terminou, e subi o banco novamente...

    Duas horas depois, a mesma coisa com o aumento do acesso:
    *10.11.0.2 2013-09-26 17:10:37 BRT [11516]: [1-1]
    db=cimed,user=postgres PANIC:  right sibling's left-link doesn't
    match*
    *10.11.0.2 2013-09-26 17:25:10 BRT [13163]: [1-1]
    db=cimed,user=postgres PANIC:  right sibling's left-link doesn't
    match*
    *
    *
    *Inclusive essa mensagem me preocupou e não tenho idéia do que
    pode ser:*
    *
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [1-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937579: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [2-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937581: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [3-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937583: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [4-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937585: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [5-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937586: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [6-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937588: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [7-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937590: Arquivo ou diretório não encontrado
    10.35.0.2 2013-09-26 18:01:28 BRT [16124]: [8-1]
    db=nutracom,user=postgres WARNING:  could not remove relation
    1663/105809227/572937597: Arquivo ou diretório não encontrado

    *


Ok. Parece que ou seu reindex não foi realmente em todos os índices ou há alguma heap corrompida.


    *
    *
    Não estou certo de como proceder: dump/ restore do banco,
    drop/create dos indices, ou alguma outra tentativa:


Primeiro. Você tem certeza que reindexou tudo? Incluíndo tabelas de sistema? Tente um `REINDEX SYSTEM`.

Pelo erro que apresentou em outra mensagem parece ter sido índices de tabelas de sistema com erro:

2013-09-26 18:37:50 BRT [19470]: [2-1] db=,user= PANIC: right sibling is not next child in "pg_class_relname_nsp_index"

Agora, mesmo que a reindexação das tabelas de sistema resolva o problema, eu faria, por segurança, o seguinte procedimento:

1. Bloquear toda e qualquer conexões de usuários/aplicações;
2. Executar um dump de todas as bases;
3. Apagar TUDO (faça um backup antes, claro);
4. Executar o initdb novamente e ter uma instância novinha em folha;
5. Executar um restore;
6. Dormir mais tranquilo... =D

    Servidor Linux, Postgresql 8.1.18, esse é o servidor de produção
    que está estável, com espaço em disco e memória sobrando.
    Tenho uma unica instancia do postgres com vários databases.



Bom. Não vou repetir o DUTRA e dizer que sua versão já não tem mais suporte, o risco é seu... MAS... Veja que na versão 8.1 a mais estável é a 8.1*.23*, e você está na 8.1*.18*, cinco versões atrasadas, logo atualize IMEDIATAMENTE para a versão 8.1*.23*, como já discutido infinitas vezes nessa lista uma atualização de release (o último número só) NÃO CAUSA INCOMPATIBILIDADE com a aplicação, basta atualizar os binários, mais nada...

Ah, veja também os release notes da 8.1.23 e vá seguindo o texto em "Migrating to version XXXX", pode ser que você esteja enfrentando um bug conhecido e corrigido nas versões mais recentes. Por exemplo, na 8.1.18 houve uma correção em índices em colunas "interval", e na 8.1.15 com índices GiST, já na 8.1.2 com índices "text".

[1] http://www.postgresql.org/docs/8.1/static/release.html#RELEASE-8-1-23

Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres <http://www.dextra.com.br/postgres/>



_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a