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

Re: [riojug] Re: Hibernate Isolation !?

Expand Messages
  • Cristiane Missias Cândido
    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
    Message 1 of 15 , Aug 1, 2007
      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
    • Marco Duarte
      Oi, Cristiane, ... realmente não vi seu email! Muito obrigado por seu interesse em ajudar. Isso é mto legal! Entendi sua orientação e, em algums progs não
      Message 2 of 15 , Aug 1, 2007
        Oi, Cristiane, ... realmente não vi seu email!
         
        Muito obrigado por seu interesse em ajudar. Isso é mto legal!
         
        Entendi sua orientação e, em algums progs não utilizei essa tecnica.
         
         
        Valeu!
        Marco Antonio
         
        ----- Original Message -----
        Sent: Wednesday, August 01, 2007 8:33 AM
        Subject: Re: [riojug] Re: Hibernate Isolation !?


        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@ dtecconsultoria. com.br>
        >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.whenExhaust edAction" >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.NoCachePro vider</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 debugUnreturnedConn ectionStackTrace s:
        > >
        > > http://forum. hibernate. org/viewtopic. php?
        > > p=2324954&sid= d173e756b9ba62a4 da397b01bf494556
        > >
        > > "set debugUnreturnedConn ectionStackTrace s 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
        > > unreturnedConnectio nTimeout, 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


        No virus found in this incoming message.
        Checked by AVG Free Edition.
        Version: 7.5.476 / Virus Database: 269.11.2/931 - Release Date: 1/8/2007 16:53
      • Marco Antonio Abreu
        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
        Message 3 of 15 , 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
          
          
            
        • marcoduarte@dtecconsultoria.com.br
          Oi, Marco Abreu, Faz sentido sim, o q vc colocou. Acrescento que, todos os cuidados são poucos pois o uso de framework abstrai mtas acoes que não vemos e
          Message 4 of 15 , Aug 2, 2007
            Oi, Marco Abreu,

            Faz sentido sim, o q vc colocou. Acrescento que, todos os cuidados "são poucos"
            pois o uso de framework abstrai mtas acoes que não vemos e nem sabemos (em
            alguns casos). Acrescentando ao uso do framework (hibernate), o SGBD, que tb
            tem suas proprias acoes (p.ex.locks), ficamos com serios problemas se, "tudo
            isso" não for bem conhecido e tratado na aplicação.

            Por exemplo destaco: o controle de isolamento default no hibernate é o default
            do SGBD. Pelo menos no SQL Server, a especificação de isolamento é por
            transação. Só que, no Hibernate, a especificação é global. Até pode
            fazer sentido tendo em vista a finalidade do Hibernate ser abstrair o SGBD.
            Mas, para a aplicação é uma questão a ser tratada, se não, travamentos
            pode acontecer! (se eu não estiver enganado).

            Valeu por seu retorno.

            obrigado
            Marco Antonio Duarte




            ----- Mensagem de mabreu@... ---------
            Data: Thu, 02 Aug 2007 09:44:39 -0300
            De: Marco Antonio Abreu <mabreu@...>
            Endereço para Resposta (Reply-To): riojug@yahoogroups.com
            Assunto: Re: [riojug] Re: Hibernate Isolation !?
            Para: riojug@yahoogroups.com


            > 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
            >>
            >>
            >>
            >


            ----- Final da mensagem de mabreu@... -----
          Your message has been successfully submitted and would be delivered to recipients shortly.