[질문] 특정 프로시저 실행중 특정 프로시저를 호출할때.. 어떤 현상이 벌어지나요? 0 8 4,015

by MD워시퍼 [기타] [2015.02.12 13:53:07]


질문관련 게시판이 안보여서 이쪽에서 문의합니다.

EAI 관련하여, 뭔가 막히는 것이 있는데, 어떻게 풀어야 할지 궁금해서 이렇게 글을 올려봅니다.

EAI로 저희 DB서버에 데이터를 INSERT를 하고, 관련 프로시저를 호출하는 로직인 것 같습니다.

문제는 프로시저의 로직자체가 많이 복잡해서, 처리할 데이터가 많다면, 그만큼 시간이 오래걸립니다.

처음 INSERT 데이터를 저희 서버에 보내주고, 프로시저를 호출하고 나서, 다음날 insert 데이터를 저희서버로 보내고, 다시 프로시저를 호출할때, 기존의 프로시저가 처리가 아직 완료되지 않았다면, 다음으로 들어온 프로시저는 처리를 안하는 것인가요? 아니면, 끝날때까지 기다린다음에 처리를 해주나요?

전문가의 의견을 듣고 싶습니다.

by 아발란체 [2015.02.12 15:53:55]
-- PL/SQL은 인터프린터 방식 언어입니다. 인터프린터 방식(절차적)은 하나씩 순서대로 실행하는 특징이 있습니다.
-- 보통 언어가 비동기 방식을 별도 기술하는 것이 아니면 다 실행은 절차적으로 되는 것 같네요.
-- 이하 테스트 구문

CREATE OR REPLACE PROCEDURE PROC_TEST3 AS
BEGIN
   DBMS_OUTPUT.PUT_LINE('======================>> START');
   PROC_TEST3_2();
   DBMS_OUTPUT.PUT_LINE('======================>> END');
END PROC_TEST3;


CREATE OR REPLACE PROCEDURE PROC_TEST3_2 AS
BEGIN
   DBMS_LOCK.SLEEP(3);
   DBMS_OUTPUT.PUT_LINE('======================>> 3');
END PROC_TEST3_2;


EXEC PROC_TEST3();

>> START
>> 3
>> END

 


by 아발란체 [2015.02.12 15:56:54]

지연 구문에서 에러 발생 시, 해당 명령어 권한을 부여하거나 DBA로 실행하면 됩니다.


by 아발란체 [2015.02.12 16:42:29]

아.. 내용 이제 이해 했습니다.

결론은 별개로 실행됩니다.

세션 값이 같아도 프로시저를 각각 호출 했다면 역시 별개로 실행됩니다.


by 임상준 [2015.02.12 16:15:40]

처음 eai 에서 들어온 세션이랑 다음날 eai 에서 들어온 세션이랑 서로 다르다면 전일 시작한 프로시저가 끝나지 않아도 두번째 세션은 단독으로 프로시저 호출을 하겠죠..

동시에 두개가 돌 때 무슨 일이 벌어질지는 프로시저 안의 내용에 따라 다르겠구요..


by MD워시퍼 [2015.02.12 19:41:31]

기존에 프로시저가 돌고 있다는 것을 확인하는 방법이 있을까요?

기존에 프로시저가 돌고 있다면 뒤에 들어온 프로시저 호출은 보류 또는 취소하는게 좋을 것 같아서요.

별개로 EAI 호출중에서 프로시저 호출만 제외시키고, 자체적으로 잡 스케쥴을 건다고 하더라도, 프로시저가 생각보다 길게 실행된다면.. 이것 또한 답이 아닐 것 같아서요...


by 아발란체 [2015.02.12 23:22:01]

프로시저가 정말 오래 걸리는 상황이라면,

차라리 프로시저 관리 테이블을 하나 만들고 구분 값을 통해 실행 종료를 확인하여 다음 프로시저를 실행되도록 싱글톤 테이블을 하나 두는 것이 명확할 것 같습니다.

아니면 프로시저 작업 대기열 테이블을 만들고, JOB를 생성하여 쌓여있는 것들을 처리하는 것도 방법이 될 것 같습니다. 근데 동시에 실행되면 문제가 되는 것이 오히려 이상한 상황이네요, 이렇게 오래 걸리는 것은 새벽에 배치로 돌리면 됩니다. 새벽 시간에 해결이 안되 실시간 부하가 발생하는 시간에도 돌아야 한다면 이건 분리하여 실행해야 하는 성격인 것 같습니다.


by 손님 [2015.02.12 22:59:10]
하루 단위로 수행되는 프로기져가...
행이 걸릴 정도라면...
튜닝이 핑요한 상환일 듯 하네요...

by MD워시퍼 [2015.02.13 09:36:39]

한번에 들어오는게 10000건 정도 들어오고

한건당  5초 정도가 걸려서 대충 50000초 정도 걸리는 것 같아요

가끔씩은 2-30000건이 들어오기도 하거든요

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입