2013/9/4 JotaComm <jota.c...@gmail.com> > > Pessoal, > > Boa tarde!!! > > Opa. Bom dia, =D...
> Vou expor o meu problema e gostaria de saber se alguém já passou por > situação semelhante: > > Tenho um vacuum rodando em uma tabela desde o dia 2013-08-27 18:58: > 41.527238-03, no entanto a tabela não é grande: 5.428.982 - (8243 MB > incluindo indices). > > Estou achando muito estranho a demora e não encontrei nada que me > indicasse problema, porém tenho tabelas maiores e o vaccum roda > normalmente. Tentei cancelar o processo e não obtive sucesso: > > billing=# SELECT localtimestamp(0); > -[ RECORD 1 ]------------------ > timestamp | 2013-09-04 11:23:06 > > billing=# SELECT > pg_stat_activity.procpid,pg_stat_activity.current_query,pg_stat_activity.query_start > FROM pg_stat_activity WHERE pg_stat_activity.current_query ~ > 'public.mensagem' AND pg_stat_activity.procpid!=pg_backend_pid(); > -[ RECORD 1 ]-+----------------------------------------------------------- > procpid | 2738 > current_query | autovacuum: VACUUM public.mensagem (to prevent wraparound) > query_start | 2013-08-27 18:58:41.527238-03 > > billing=# SELECT pg_cancel_backend(2738); > -[ RECORD 1 ]-----+-- > pg_cancel_backend | t > > billing=# SELECT localtimestamp(0); > -[ RECORD 1 ]------------------ > timestamp | 2013-09-04 11:23:18 > > billing=# SELECT > pg_stat_activity.procpid,pg_stat_activity.current_query,pg_stat_activity.query_start > FROM pg_stat_activity WHERE pg_stat_activity.current_query ~ > 'public.mensagem' AND pg_stat_activity.procpid!=pg_backend_pid(); > -[ RECORD 1 ]-+----------------------------------------------------------- > procpid | 2738 > current_query | autovacuum: VACUUM public.mensagem (to prevent wraparound) > query_start | 2013-08-27 18:58:41.527238-03 > > Sempre que consultar a pg_stat_activity, inclua a coluna waiting. Acredito que você omitiu a principal informação para ajudarmos a resolver o problema. Outras informações: > > procpid | 2738 > relname | mensagem > current_query | autovacuum: VACUUM public.mensagem (to prevent > wraparound) > query_start | 2013-08-27 18:58:41.527238-03 > virtualtransaction | 3/301 > mode | ShareUpdateExclusiveLock > n_tup_ins | 448414 > n_tup_upd | 2665536 > n_tup_del | 0 > n_live_tup | 448375 > n_dead_tup | 1129161 > last_vacuum | > last_autovacuum | > last_analyze | > last_autoanalyze | > > Bom, apesar de *você não informar* qual foi essa última consulta, vejo que é um join entre pg_stat_activity, pg_locks e pg_stat_user_tables, e, pelo ShareUpdateExclusiveLock podemos assumir que o VACUUM está bloqueado (por favor, inclua a coluna pg_locks.granted ou pg_stat_activity.waiting para garantir). Bom, agora temos que descobrir quem está bloqueando o VACUUM, eu chutaria, pelo tempo, que você está usando "prepared transactions", por favor verifique o resultado da consulta (conectado à base em questão): SELECT * FROM pg_prepared_xacts; E verifique se alguma pode ser "matada" (provavelmente uma com o timestamp "prepared" antigo), se puder execute o seguinte para matá-la: ROLLBACK PREPARED 'foo'; Onde "foo" seria o identificador da transação, que pode ser recuperado na coluna "gid". A versão do PostgreSQL é a 9.0.4. > > Atualize imediatamente (sem desculpas) para a versão 9.0.13 (ou se puder, para a 9.2.4, mas essa não precisa do "imediatamente", =P ). A versão do SO é CentOS release 6.3 (Final). > > Também vale a pena atualizar para o 6.4, mas não vejo como algo tão crítico/urgente. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! 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