Loading ...
Sorry, an error occurred while loading the content.

19100Re: [riojug] Re: Hibernate Isolation !?

Expand Messages
  • Marco Antonio Abreu
    Aug 2, 2007
      Olá Marco,

      Trabalhei pouco com o MS SQL-Server, mas mesmo assim ele se apresentou com uma característica interessante, que talvez esteja acontecendo com você.  Uma vez desenvolvi uma aplicação que realizava inserção/atualização de informações em lote no banco a partir de fonte externa (XML, CVS, TXT, EDI).  Todas as vezes que rodava esta aplicação, mesmo no início das execuções ou quando eram apenas algumas poucas linhas, o banco fazia travamento por tabela nunca por registro.  Assim, logo no primeiro insert/update, a aplicação travava as tabelas atualizadas e as demais aplicações em execução ficavam paradas enquanto a minha não encerrava e, pelo menos uma vez, ocorreu um dead-lock.

      Na época falei com o DBA da empresa e ele me disse que o banco fazia o controle de travamento automaticamente, não havendo configuração para forçar uma ou outra estratégia (registro ou tabela).  Não sei se isso é realmente verdade, mas de qualquer forma pode ser a origem de seu problema.  Talvez valha a pena dar uma atenção a isso.

      A minha solução foi fazer processos quebrados, onde a cada 1000 linhas (se me lembro bem) fazia um commit e reiniciava a transação até terminar a importação.  Isso me atendeu, mas não sei se vai lhe atender.

      Espero ter ajudado.

      []'s,

      Marco Antonio Abreu
      IT Quality Systems
      mabreu@...
      http://www.itquality.com.br
      


      Cristiane Missias Cândido wrote:
      Olá Marco,
      
      Enviei um email uns dias atráz respondendo sua dúvida, parece que não foi o 
      email. Estou enviando novamente.
      
      Passei por este problema de lock quando tentava inserir dados em batch.
      Resolvi este problema abrindo e fechando a sessão antes e após o 
      processamento.
      Para esclarecer segue um pseudo-código, abaixo:
      
      //abre sessão
      
      while( fim de leitura do xml )
      {
        //salva dados
        //release a cada 100 registros
      }
      
      //fecha sessão
      
      
        
      From: "Marco Duarte" <marcoduarte@...>
      Reply-To: riojug@yahoogroups.com
      To: <riojug@yahoogroups.com>
      Subject: Re: [riojug] Re: Hibernate Isolation !?
      Date: Tue, 31 Jul 2007 23:58:00 -0300
      
      Fábio, ... muito obrigado por sua ajuda e sugestões.
      
      Marco Antonio
        ----- Original Message -----
        From: fabiolnmiranda
        To: riojug@yahoogroups.com
        Sent: Tuesday, July 31, 2007 5:06 PM
        Subject: [riojug] Re: Hibernate Isolation !?
      
      
        Não sei como seria no MS SQL Server, mas no MySQL Administrator (que
        eu uso com frequencia), há um menu Startup Variables / Advanced
        Networking, onde podemos configurar várias opções do Banco de Dados.
      
        Uma delas é o waitTimeout - tempo que o SGBD aguarda por atividade em
        uma conexão antes de fechá-la. Outra é o maxConnections - número
        máximo de clientes simultâneos. A configuração no pool deve levar
        estes valores em consideração.
      
        Por exemplo, não posso configurar um pool de 100 conexões caso o BD
        esteja configurado para liberar apenas 50 conexões simultaneas.
      
        Acho (nunca testei) que o mesmo raciocínio vale em ambientes com mais
        de uma aplicação, com vários bancos em um mesmo SGBD. Por exemplo, 2
        aplicações, com BD liberando 50 conexões, pode-se colocar um pool com
        30 conexões e o outro com 20 (a soma não ultrapassa 50).
      
        Por outro lado, caso o waitTimeout do banco seja menor que o
        maxIdleTime do pool, pode ocorrer de o banco encerrar uma conexão, e
        ela continuar no pool (caso o pool reusar essa conexão, será lançada
        uma exceção). Caso o waitTimeout seja maior, pode acontecer de o pool
        liberar a conexão e ela continuar ociosa no banco. Na dúvida, costumo
        configurar os dois com o mesmo valor.
      
        Dito isso (espero que alguém me corrija caso tenha falado alguma
        bobagem), um caminho para verificação seria:
      
        1) Investigar a configuração do SGBD.
        2) Verificar se as configurações do Pool estão coerentes com as do
        SGBD.
        3) (Tunning) Testar configurações - aumentar/diminuir o waitTimeout,
        aumentar/diminuir conexões simultaneas - e verificar se há melhora no
        desempenho da aplicação em alguma delas.
      
        Abs
      
        --- In riojug@yahoogroups.com, "Marco Duarte" <marcoduarte@...> wrote:
        >
        > Oi, Fábio... valeu pelas dicas!!!!
        >
        > Mas, eu não utilizo C3Po, e sim o dbcp. Abaixo uma parte do cfg e,
        peço a vc e aos demais colegas, alguma observação sobre os
        parametros. "Quem sabe alguma bobeira minha faltando ou demais?".
        >
        > <property name="connection.username">usrprod</property>
        >
        > <property name="connection.password">bdpas</property>
        >
        > <property
        name="connection.url">jdbc:jtds:sqlserver://bdsql2005/bdprod</property
        >
        >
        > <property name="hibernate.dbcp.maxActive">200</property>
        >
        > <property name="hibernate.connection.isolation">2</property>
        >
        > <property name="hibernate.dbcp.whenExhaustedAction">1</property>
        >
        > <property name="hibernate.dbcp.maxWait">120000</property>
        >
        > <property name="hibernate.dbcp.maxIdle">200</property>
        >
        >
        > <!-- Enable Hibernate's automatic session context management -->
        >
        > <property name="current_session_context_class">thread</property>
        >
        > <!-- Disable the second-level cache -->
        >
        > <property
        name="cache.provider_class">org.hibernate.cache.NoCacheProvider</prope
        rty>
        >
        >
        >
        > obrigado
        >
        > Marco Antonio
        >
        >
        >
        > ----- Original Message -----
        > From: fabiolnmiranda
        > To: riojug@yahoogroups.com
        > Sent: Sunday, July 29, 2007 3:32 PM
        > Subject: [riojug] Re: Hibernate Isolation !?
        >
        >
        > Realmente, Marco,
        >
        > Depurar estes tipos de problema oferecem dificuldade adicional,
        pois
        > pode haver necessidades de ajustes tanto no BD, como no Pool ou
        mesmo
        > no framework de ORM. Para ter certeza do diagnóstico, pode ser
        > necessário estudar mais a fundo cada um dos 3.
        >
        > Algumas dicas:
        > 1) Cuidado com o parâmetro maxPoolSize do Pool e o número máximo
        de
        > conexões que o BD está configurado para liberar.
        >
        > 2) Cuidado com o parâmetro maxIdleTime do Pool e as configurações
        > de "connection timeout" do banco.
        >
        > 3) Para ajudar a depurar problemas de conexão usando o Pool C3P0,
        vc
        > pode usar o parâmetro debugUnreturnedConnectionStackTraces:
        >
        > http://forum.hibernate.org/viewtopic.php?
        > p=2324954&sid=d173e756b9ba62a4da397b01bf494556
        >
        > "set debugUnreturnedConnectionStackTraces to true. If this
        parameter
        > is set, the stack trace associated with all Connection checkouts
        will
        > be cached, and when a Connection has to be destroyed for
        outliving
        > unreturnedConnectionTimeout, the stack trace that checked it out
        will
        > be dumped -- at INFO level -- to logs. This lets you see exactly
        what
        > check-out in your app potentially fails to check back in. (Only
        use
        > this parameter while debugging, as it harms performance.)"
        >
        > Abs
        > Fábio.
        >
        > --- In riojug@yahoogroups.com, "Marco Duarte" <marcoduarte@>
        wrote:
        > >
        > > Fábio,
        > >
        > > Uso sim um pool de conexão. Já fiz a verificação de de
        fechamento
        > de conexão perdida. Com a experiencia dessa aplicação, estou
        > estudando mais o Hibernate e, me certificando que, "o buraco é
        bem
        > mais em baixo". É preciso "cuidado" em todas as ações de acesso
        ao
        > banco e configuração do hibernate.
        > >
        > > Ainda não identifiquei o default de "isolamento" assumido pelo
        > hibernate. Mas, estou para especificar isolamento 2 (leitura
        > comitada).
        > >
        > > Obrigado e grande abraço.
        > > Marco Antonio
        > >
        > > ----- Original Message -----
        > > From: fabiolnmiranda
        > > To: riojug@yahoogroups.com
        > > Sent: Sunday, July 29, 2007 10:57 AM
        > > Subject: [riojug] Re: Hibernate Isolation !?
        > >
        > >
        > > Oi Marco,
        > >
        > > Como é feita a conexão ao banco? Vc usa um pool? Vc tem como
        > > monitorar no banco o número de conexões abertas? Às vezes
        > problemas
        > > de travamento no BD podem ocorrer devido ao fato de haverem
        > conexões
        > > ociosas abertas, e o banco não libera a criação de novas
        > conexões,
        > > sendo essa uma possibilidade passível de verificação.
        > >
        > > Cordialmente,
        > > Fábio.
        > >
        > > --- In riojug@yahoogroups.com, "Marco Duarte" <marcoduarte@>
        > wrote:
        > > >
        > > > Olá,
        > > >
        > > > Estou numa aplicacao em producao, com Hibernate e MSSQL
        Server,
        > > onde estou tendo paradas (travamento da aplicacao)
        devido "Locks"
        > no
        > > banco de dados. Ou seja, em tempos, a aplicacao trava e no
        banco
        > de
        > > dados um lock travando os demais.
        > > >
        > > > Avaliando esta situacao, estou centrado na questão
        > do "Isolamento
        > > de banco". Pergunto:
        > > >
        > > > 1) Qual o nivel de isolamento padrão do hibernate (1, 2, 4 ou
        > 8) ?
        > > >
        > > > 2) Muito embora alguns documentos indiquem o nivel 4, estou
        > > tendendo para o nivel 2. Alguem já passou por isso?
        > > >
        > > > 3) É necessário a indicação explícita de autocommit=true ?
        > > >
        > > > Quem puder passar alguma experiencia, sugestão e/ou dicas,
        > agradeço.
        > > >
        > > > Marco Antonio
        > > >
        > >
        > >
        > >
        > >
        > >
        > >
        > > ----------------------------------------------------------
        > ----------
        > >
        > >
        > > No virus found in this incoming message.
        > > Checked by AVG Free Edition.
        > > Version: 7.5.476 / Virus Database: 269.10.22/923 - Release
        Date:
        > 27/7/2007 18:01
        > >
        >
        >
        >
        >
        >
        >
        > ----------------------------------------------------------
        ----------
        >
        >
        > No virus found in this incoming message.
        > Checked by AVG Free Edition.
        > Version: 7.5.476 / Virus Database: 269.10.25/926 - Release Date:
        29/7/2007 23:14
        >
      
      
      
      
      
      
      ------------------------------------------------------------------------------
      
      
        No virus found in this incoming message.
        Checked by AVG Free Edition.
        Version: 7.5.476 / Virus Database: 269.11.0/929 - Release Date: 
      31/7/2007 17:26
          
      _________________________________________________________________
      MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br
      
      
        
    • Show all 15 messages in this topic