postgres vácuo

2

Ok, eu mudei para uma nova empresa e vejo que eles têm um único banco de dados PostgreSQL para executar o OpenNMS.

Sou uma pessoa do MySQL, não familiarizada com o PostgreSQL, mas pelo menos aprendi como executar psql e postgres -D para entrar no modo de usuário único.

De qualquer forma, o OpenNMS caiu. Eu entrei e segui para o PostgreSQL dando este erro:

WARNING:  database "template1" must be vacuumed within 965550 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

Na verdade, começou em 1 milhão e estou em 965500, como você pode ver. Cheguei a esse ponto fazendo login de usuário único ( postgres -D ) e executando o Vacuum full. Agora eu esperava que isso limpasse, mas os resultados são exatamente 55 linhas de:

WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938861 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING:  database "template1" must be vacuumed within 938860 transactions
HINT:  To avoid a database shutdown, execute a full-database VACUUM in "template1".

Então, a pergunta que eu tenho é, eu só preciso continuar executando isso até chegar a 0 ou estou fazendo errado?

    
por Benny B 21.07.2011 / 17:15

1 resposta

5

Eu já tive esse problema antes. Abaixo estão minhas anotações de como eu consertei

Você precisa corrigir o problema executando um vácuo, como o erro sugere convenientemente. Para fazer isso, primeiro, desligue postgres sudo /sbin/service postgresql stop

Agora, você precisará passar por cada banco de dados e executar um vácuo com o back-end independente. Como o usuário postgres Run: postgres -D /opt/pgsql/data/ postgres

Onde / opt / pgsql / data é o caminho para o diretório de dados do postgres, e postgres é o nome do banco de dados que você deseja corrigir.

Você receberá um aviso como:

PostgreSQL stand-alone backend 8.1.18

backend>

Basta digitar VACUUM no backend > prompt.

Você provavelmente terá algo como AVISO: banco de dados "template1" deve ser aspirado dentro de 999407 transações DICA: Para evitar o desligamento do banco de dados, execute um VACUUM de banco de dados completo em "template1".

Continue repetindo as etapas, alterando o DBNAME toda vez até não receber mais os avisos. Quando isso acontece, você pode reiniciar o postgres e tudo estará certo novamente.

Editar: Também devo mencionar que depois de fazermos esse processo algumas vezes; Decidimos implementar o processo de autovacuum: link

    
por 21.07.2011 / 17:36