Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #103322
    Caduzera
    Participante

      Salve galera, tudo na paz?

      Sou novo aqui no Fórum … sou Analista de Sistemas Pleno e trabalho em uma empresa com (Oracle 11g hack) em uma aplicação Delphi 2006 de alta disponibilidade.

      Temos enfrentando um problema que é o seguinte. Quando vamos fazer um INSERT em uma tabela do sistema cuja uma das suas informações que é uma FK de outra tabela, o Oracle da uma LOCK nesse registro da FK e só liberar o mesmo após a execução do insert.

      O problema é que isso gera uma lentidão no banco, pode temos uma média de 400 usuários logados no sistema ao mesmo tempo … e quando executamos esses INSERT’S, e o Oracle trava suas FK, o usuários que estão tentando fazer UPDATE nestes campos tem que ficar esperando ..

      Eu creio que existe uma melhor forma de se fazer isso .. alguma outra config do Oracle ou coisa assim …

      Abs

      #103326
      rman
      Participante

        @Caduzera

        Creio que isso está relacionado ao Delphi 2006. Talvez alguma configuração do componente de acesso a dados que faça isso.

        Faça um teste utilizando o sqlplus, simule as operações que a sua aplicação faz, e verá que não terá nenhum lock como você disse.

        Obs: O correto é Oracle 11g RAC (REAL APPLICATION CLUSTERS)

        #103328
        rman
        Participante

          @Caduzera

          Segue uma simulação que eu fiz aqui, verifique se é essa a situação que apresenta o lock:


          CREATE TABLE EDITORAS(
          ID NUMBER
          ,NOME VARCHAR2(32) NOT NULL
          ,EMAIL VARCHAR2(32)
          );

          ALTER TABLE EDITORAS ADD CONSTRAINT PK_EDITORAS PRIMARY KEY(ID);

          CREATE TABLE LIVROS(
          ID NUMBER
          ,ID_EDITORA NUMBER NOT NULL
          ,NOME VARCHAR2(32) NOT NULL
          );

          ALTER TABLE LIVROS ADD CONSTRAINT PK_LIVROS PRIMARY KEY(ID);

          ALTER TABLE LIVROS ADD CONSTRAINT FK_LIVROS_EDITORAS FOREIGN KEY(ID_EDITORA) REFERENCES EDITORAS(ID);

          INSERT INTO EDITORAS(ID,NOME,EMAIL) VALUES(1,'ATLAS','CONTATO@ATLAS.COM.BR');
          INSERT INTO EDITORAS(ID,NOME,EMAIL) VALUES(2,'FLORESTA','CONTATO@FLORESTA.COM.BR');
          INSERT INTO EDITORAS(ID,NOME) VALUES(3,'MARINGA');
          COMMIT;

          CONEXÃO 1

          INSERT INTO LIVROS(ID,ID_EDITORA,NOME) VALUES(1,3,'MANUAL DO DBA');

          CONEXÃO 2

          UPDATE EDITORAS
          SET EMAIL = 'CONTATO@MARINGA.COM.BR'
          WHERE ID = 3;
          COMMIT;

          CONEXÃO 1

          COMMIT;

          Observe que mesmo a CONEXÃO 1 pode demorar 1 hora pra dar o COMMIT, o UPDATE da CONEXÃO 2 já foi feito e COMMITADO, sem nenhuma espera.

          #103339
          Caduzera
          Participante

            Amigo, você tem razão …

            Realizei o teste mencionado e não ocorreu nenhum problema de lock no registro …

            Vou realizar o mesmo teste via aplicação e ver se pode ser um problema de acesso via sistema …

            Valeu cara ….

            Abs

            #103341
            Caduzera
            Participante

              Amigo, conversando com o pessoal aqui (inclusive o DBA), me informaram que este problema ocorre quando o banco esta “carregado”, isto é, no início de nossa operação, quando se logam no sistema mais ou menos 400 usuários, e logo no início do sistema, todos precisam realizar um INSERT em uma tabela X, o banco devido ao grande numero de sessões, ele começa a gerar esse LOCK das FK’s desta tabela X … devido ao grande número de acessos a mesma ….

              Será que os amigos teriam mais alguma ideia do que pode ser?

              Abs

              #103342
              rman
              Participante

                @Caduzera

                Solicite ao DBA monitorar as atividades no momento do incidente, verifique qual sessão está bloqueando e qual está sendo bloqueada, verifique quais são as instruções que estão causando o lock.

                Ainda acho que não existe lock nenhum, o que pode acontecer é algum SQL com baixo desempenho, isso não quer dizer que exista um lock.

                #103343
                Caduzera
                Participante

                  Obrigado por estar ajudando amigo …

                  Então, quando ocorre o problema, o banco fica extremamente lento, o que impossibilita os DBA’s de analisarem quais são as querys que causam o problema …

                  Mas o problema ocorre quando inicia a operação … onde todos os usuários logam e acessam ao mesmo tempo o sistema …

                  Abs

                  #103346
                  rman
                  Participante

                    @Caduzera

                    Desde quando começou isso ? Após uma atualização de versão ? Sente junto com o DBA e faça o debug da aplicação.

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.