- Este tópico contém 7 respostas, 2 vozes e foi atualizado pela última vez 13 anos, 11 meses atrás por
rman.
-
AutorPosts
-
12 de abril de 2012 às 10:07 pm #103322
Caduzera
ParticipanteSalve 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
12 de abril de 2012 às 11:02 pm #103326rman
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)
12 de abril de 2012 às 11:30 pm #103328rman
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.
13 de abril de 2012 às 1:54 pm #103339Caduzera
ParticipanteAmigo, 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
13 de abril de 2012 às 3:47 pm #103341Caduzera
ParticipanteAmigo, 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
13 de abril de 2012 às 5:02 pm #103342rman
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.
13 de abril de 2012 às 5:13 pm #103343Caduzera
ParticipanteObrigado 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
13 de abril de 2012 às 5:48 pm #103346rman
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.
-
AutorPosts
- Você deve fazer login para responder a este tópico.