[pgbr-geral] Registro tava e pronto
Pessoal, tem hora que um registro trava e quem diz que consigo fazer algo nele Eu não uso Lock em nada As vezes por uma queda de rede, sei lá Só sei que um tal registro tarava e não consigo deletar, update, só select COmo destravar nessa situação ? Eu estou tendo que reiniciar o postgres pra conseguir dar um update no registro Marcelo Silva --- ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Registro tava e pronto
On 04/12/2013 15:25, Marcelo da Silva wrote: Pessoal, tem hora que um registro trava e quem diz que consigo fazer algo nele Eu não uso Lock em nada Bom, tens como detalhar um pouco melhor, fica mais fácil para te ajudar. As vezes por uma queda de rede, sei lá Só sei que um tal registro tarava e não consigo deletar, update, só select COmo destravar nessa situação ? Eu estou tendo que reiniciar o postgres pra conseguir dar um update no registro Marcelo Silva --- ___ 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
Re: [pgbr-geral] Registro tava e pronto
Olá, Em 12 de abril de 2013 15:25, Marcelo da Silva escreveu: > Pessoal, tem hora que um registro trava e quem diz que consigo fazer algo > nele > Eu não uso Lock em nada > O que você considera um registro travar? Você não consegue fazer nenhuma operação de escrita com este registro? > As vezes por uma queda de rede, sei lá > Só sei que um tal registro tarava e não consigo deletar, update, só select > Você não esta com alguma transação concorrente aberta para este registro que esta esperando um COMMIT ou ROLLBACK, ai quando você reinicia o banco, automaticamente um ROLLBACK é executado e por isso você consegue manipular o registro. > > COmo destravar nessa situação ? > > Eu estou tendo que reiniciar o postgres pra conseguir dar um update no > registro > > > Marcelo Silva > --- > > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Registro tava e pronto
Em 12 de abril de 2013 15:25, Marcelo da Silva escreveu: > Pessoal, tem hora que um registro trava e quem diz que consigo fazer algo > nele Pouca informação... > Eu não uso Lock em nada Não usar locks não significa que um registro nunca será "lockado". > As vezes por uma queda de rede, sei lá > Só sei que um tal registro tarava e não consigo deletar, update, só select > > COmo destravar nessa situação ? > > Eu estou tendo que reiniciar o postgres pra conseguir dar um update no > registro > Quando isso acontecer, verifique se existem alguma transação aberta na view pg_stat_activity[1]. Geralmente, nesses casos, na coluna current_query aparece a indicação "in transaction". Possivelmente (com certeza) devido ao fato de uma aplicação ter iniciado uma transação e não ter finalizado a mesma. 1 - http://www.postgresql.org/docs/9.2/static/monitoring-stats.html -- Marcone Peres - DBA http://www.linkedin.com/in/marconeperes oraculogeo.blogspot.com @marconeperes (61) 8146-0028 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Registro tava e pronto
Veja a tela do PGAdmin http://imagebin.org/253758 Quando ele trava eu só consigo parar a sessão pelo PGAdmin nesta tela aí, mas se eu tentar alterar o registro seja pelo pgadmin ou pela minha aplicação ele trava denovo, ou seja, tenho que mandar todo mundo sair do sistema, reiniciar o postgres pra ele liberar o tal registro. Tenho notado que isso ocorre quando dá uma queda de conexão, mas não necessariamente trava um registro, mas quando trava é este transtorno. Bem, as maquinas com cabo fisico é tranquilo, não dá problema pois não cai, mas as com wireless sempre me causam isso. Como liberar o tal registro pra não ter que parar todos, tem um esquema ? Se desse pra eu fazer algo pela aplicação que travou o registro eu daria um Rollback e beleza, mas ele chega a perder a conexão, aí já era. To na luta pra achar uma solução amigável... Marcelo Silva --- Em 12 de abril de 2013 15:44, Marcone escreveu: > Em 12 de abril de 2013 15:25, Marcelo da Silva > escreveu: > > Pessoal, tem hora que um registro trava e quem diz que consigo fazer algo > > nele > > Pouca informação... > > > Eu não uso Lock em nada > > Não usar locks não significa que um registro nunca será "lockado". > > > As vezes por uma queda de rede, sei lá > > Só sei que um tal registro tarava e não consigo deletar, update, só > select > > > > COmo destravar nessa situação ? > > > > Eu estou tendo que reiniciar o postgres pra conseguir dar um update no > > registro > > > > Quando isso acontecer, verifique se existem alguma transação aberta na > view pg_stat_activity[1]. > > Geralmente, nesses casos, na coluna current_query aparece a indicação > "in transaction". > > Possivelmente (com certeza) devido ao fato de uma aplicação ter > iniciado uma transação e não ter finalizado a mesma. > > 1 - http://www.postgresql.org/docs/9.2/static/monitoring-stats.html > > -- > Marcone Peres - DBA > http://www.linkedin.com/in/marconeperes > oraculogeo.blogspot.com > @marconeperes > (61) 8146-0028 > ___ > 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
Re: [pgbr-geral] Registro tava e pronto
Em 12 de abril de 2013 15:58, Marcelo da Silva escreveu: > Veja a tela do PGAdmin > > http://imagebin.org/253758 A imagem tá chei de " in transaction"... cara isso só dá dor de cabeça como essa que você tá tendo agora. > Quando ele trava eu só consigo parar a sessão pelo PGAdmin nesta tela aí, > mas se eu tentar alterar o registro seja pelo pgadmin ou pela minha > aplicação ele trava denovo, ou seja, tenho que mandar todo mundo sair do > sistema, reiniciar o postgres pra ele liberar o tal registro. Se você tá com moral de mandar todo mundo sair do sistema no meio do expediente para reiniciar o banco, é bom você canalizar isso para ser feita uma alteração urgente nessa aplicação para ela começar a terminar as transações (commit ou rollback)!! > Tenho notado que isso ocorre quando dá uma queda de conexão, mas não > necessariamente trava um registro, mas quando trava é este transtorno. > Bem, as maquinas com cabo fisico é tranquilo, não dá problema pois não cai, > mas as com wireless sempre me causam isso. > > Como liberar o tal registro pra não ter que parar todos, tem um esquema ? Um solução sintomática e paliativa seria você terminar o processo do postgres que está causando o lock com a função pg_terminate_backend[1] - USE COM EXTREMA CAUTELA para não matar quem não tem culpa! > Se desse pra eu fazer algo pela aplicação que travou o registro eu daria um > Rollback e beleza, mas ele chega a perder a conexão, aí já era. > > To na luta pra achar uma solução amigável... > > > Marcelo Silva > --- 1 - http://www.postgresql.org/docs/9.2/static/functions-admin.html -- Marcone Peres - DBA http://www.linkedin.com/in/marconeperes oraculogeo.blogspot.com @marconeperes (61) 8146-0028 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Registro tava e pronto
Com toda humildade possivel :) Não vejo como, no meu caso que preciso de transações concorrentes (tempo real), abrir e fechar as transações sem um malabarismo excepcional. Por exemplo, meu cadastro de clientes se o usuário abre, não posso abrir pegar X registros e fechar a transação, eu trabalho com componentes DBWare (conexão direta com a tabela), eu tenho um controle manual por assim dizer, quando um registro está em uso e outro tenta abri-lo o sistema não deixa... funciona de boa. O Financeiro tem que ver uma venda que acabou de ser efetivada e dar o aval, se não retorna ao vendedor e por ai vai... é bem dinâmico mesmo, é atendimento ao público (balcão). Esse meu problema não acontece toda hora, é bem exporádico, mas quando acontece me dá esse transtorno. Na minha aplicação enquanto um formulario está aberto tenho que manter a transação aberta senão ele limpa as informações. Quanto a terminar somente o processo do tal registro eu consigo fazer isso pelo pgadmin mas ele trava o registro mesmo sem a conexão, isso que estou achando estranho. Eu pedi pra todos sairem, vi que não havia mais conexão, só a minha, então tentei alterar o tal registro, mas não foi, ele só liberou depois que restartei o postgres. Só a título de comparação, quando usava o MySQL nesse mesmo conceito que trabalho não ocorria isso, um colega disse aqui na lista que o modo do MySQL trabalhar é diferente, é tipo um espelho, tanto é que posso alterar uma tabela colocando ou inserindo novos campos que ele não grita. No postgres já vi que isso não é possível, mas compreendo que são arquiteturas diferentes. Só preciso compreender melhor o postgres pra lidar com essas situações A ajuda dos colegas aqui tem me ajudado muito, mais uma vez agradeço! Marcelo Silva --- Em 12 de abril de 2013 16:15, Marcone escreveu: > Em 12 de abril de 2013 15:58, Marcelo da Silva > escreveu: > > Veja a tela do PGAdmin > > > > http://imagebin.org/253758 > > A imagem tá chei de " in transaction"... cara isso só dá dor de > cabeça como essa que você tá tendo agora. > > > Quando ele trava eu só consigo parar a sessão pelo PGAdmin nesta tela aí, > > mas se eu tentar alterar o registro seja pelo pgadmin ou pela minha > > aplicação ele trava denovo, ou seja, tenho que mandar todo mundo sair do > > sistema, reiniciar o postgres pra ele liberar o tal registro. > > Se você tá com moral de mandar todo mundo sair do sistema no meio do > expediente para reiniciar o banco, é bom você canalizar isso para ser > feita uma alteração urgente nessa aplicação para ela começar a > terminar as transações (commit ou rollback)!! > > > Tenho notado que isso ocorre quando dá uma queda de conexão, mas não > > necessariamente trava um registro, mas quando trava é este transtorno. > > Bem, as maquinas com cabo fisico é tranquilo, não dá problema pois não > cai, > > mas as com wireless sempre me causam isso. > > > > Como liberar o tal registro pra não ter que parar todos, tem um esquema ? > > Um solução sintomática e paliativa seria você terminar o processo do > postgres que está causando o lock com a função pg_terminate_backend[1] > - USE COM EXTREMA CAUTELA para não matar quem não tem culpa! > > > Se desse pra eu fazer algo pela aplicação que travou o registro eu daria > um > > Rollback e beleza, mas ele chega a perder a conexão, aí já era. > > > > To na luta pra achar uma solução amigável... > > > > > > Marcelo Silva > > --- > > > > 1 - http://www.postgresql.org/docs/9.2/static/functions-admin.html > > > -- > Marcone Peres - DBA > http://www.linkedin.com/in/marconeperes > oraculogeo.blogspot.com > @marconeperes > (61) 8146-0028 > ___ > 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
Re: [pgbr-geral] Registro tava e pronto
Tome top post... Em 12-04-2013 16:33, Marcelo da Silva escreveu: Com toda humildade possivel :) Não vejo como, no meu caso que preciso de transações concorrentes (tempo real), abrir e fechar as transações sem um malabarismo excepcional. Por exemplo, meu cadastro de clientes se o usuário abre, não posso abrir pegar X registros e fechar a transação, eu trabalho com componentes DBWare (conexão direta com a tabela), eu tenho um controle manual por assim dizer, quando um registro está em uso e outro tenta abri-lo o sistema não deixa... funciona de boa. O Financeiro tem que ver uma venda que acabou de ser efetivada e dar o aval, se não retorna ao vendedor e por ai vai... é bem dinâmico mesmo, é atendimento ao público (balcão). Esse meu problema não acontece toda hora, é bem exporádico, mas quando acontece me dá esse transtorno. Na minha aplicação enquanto um formulario está aberto tenho que manter a transação aberta senão ele limpa as informações. Isso se chama lock pessimista. É um conceito antigo, mas muita aplicação funciona assim até hoje, e posso até chutar que sua aplicação é Delphi. Quanto a terminar somente o processo do tal registro eu consigo fazer isso pelo pgadmin mas ele trava o registro mesmo sem a conexão, isso que estou achando estranho. Provavelmente o PostgreSQL não detectou a queda da conexão. Você falou em Wireless, isso pode acontecer mesmo. Eu pedi pra todos sairem, vi que não havia mais conexão, só a minha, então tentei alterar o tal registro, mas não foi, ele só liberou depois que restartei o postgres. Só a título de comparação, quando usava o MySQL nesse mesmo conceito que trabalho não ocorria isso, um colega disse aqui na lista que o modo do MySQL trabalhar é diferente, é tipo um espelho, tanto é que posso alterar uma tabela colocando ou inserindo novos campos que ele não grita. No postgres já vi que isso não é possível, mas compreendo que são arquiteturas diferentes. Isso é possível sim. E o MySQL com InnoDB também tem locks semelhantes. Só preciso compreender melhor o postgres pra lidar com essas situações Seu servidor de banco de dados é Linux. Considere usar keep alives. Veja em [1]. Eu uso em alguns servidores: tcp_keepalives_idle=60 tcp_keepalives_interval=30 tcp_keepalives_count=2 Isso faz com que conexões fechadas pela ponta remota (o que inclui problemas em rede, firewalls e nats malucos) serem detectadas pelo servidor PostgreSQL e em até 2 minutos a conexão morre por força do servidor. [1] http://www.postgresql.org/docs/9.2/static/runtime-config-connection.html []s __ Flavio Henrique A. Gurgel Líder de Projetos Especiais Consultoria, Projetos & Treinamentos 4LINUX Tel1: +55-11.2125-4747 ou 2125-4748 www.4linux.com.br email: fla...@4linux.com.br __ FREE SOFTWARE SOLUTIONS ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral