PL/SQL에서 스레드화를 사용할 수 있습니까?
PL/SQL에 비동기 호출 기능이 있습니까?코드 블록에 있는 경우 프로시저를 여러 번 호출하고 프로시저가 언제 무엇을 반환하는지 신경쓰지 않습니다.
BEGIN
myProc(1,100);
myProc(101,200);
myProc(201,300);
...
...
END;
의 경우,내 Proc(1,실행되기 에 내 200가 를 마칠 까지 기다리지
감사해요.
DBMS_Scheduler 및 DBMS_JOB 접근 방식의 경우 +1이지만 다른 접근 방식을 사용해야 하는지도 고려해야 합니다.
절차가 행 단위로 실행되는 경우 속도가 느릴 경우 절차를 여러 번 동시에 실행하는 것이 아니라 설정 기반 접근 방식이 사용되도록 하는 것이 정답일 수 있습니다.그런 다음 병렬 쿼리와 병렬 DML을 사용하여 프로세스의 벽 시계 시간을 줄일 수도 있습니다.
나는 이것이 매우 흔한 잘못이기 때문에 이것을 언급합니다.
DBMS_JOB에 다음과 같이 제출합니다.
declare
ln_dummy number;
begin
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(1,100); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(101,200); end;');
DBMS_JOB.SUBMIT(ln_dummy, 'begin myProc(201,300); end;');
COMMIT;
end;
작업을 처리하기 위해 스레드를 생성하려면 job_queue_processes 매개 변수를 >0으로 설정해야 합니다.user_jobs 보기를 검사하여 작업을 쿼리할 수 있습니다.
이는 Oracle 9i에 적용되지만 10g의 지원이 무엇인지는 확실하지 않습니다.자세한 내용은 여기를 참조하십시오.
편집: 누락된 COMMIT가 추가되었습니다.
DBMS_Scheduler를 확인해 보는 것이 좋습니다.
완전성을 위해 편집:
DMBS_Scheduler는 Oracle 10g에서 사용할 수 있습니다.이 이전 버전의 경우 DBMS_JOB는 거의 동일한 작업을 수행합니다.
자세한 내용은 http://download.oracle.com/docs/cd/B12037_01/server.101/b10739/jobtosched.htm 을 참조하십시오.
PL/SQL 병렬 처리의 경우 다음 옵션이 있습니다.
이렇게 하면 PL/SQL에서 포킹 및 스레딩을 "에뮬레이트"할 수 있습니다.물론 이러한 기능을 사용하면 병렬로 실행되는 프로시저 간의 통신이 필요하다는 것을 알 수 있습니다.확인 방법:
개인적으로 DBMS_Scheduler를 사용하여 병렬 처리 시스템을 구현하고 DBMS_Pipe를 사용하여 "스레드" 간의 통신을 수행했습니다.저는 이 둘의 조합에 매우 만족했고, 저의 주요 목표(특정 중량 절차로 주요 처리 시간을 줄이는 것)가 달성되었습니다!
당신은 11g부터 시작하는 다른 옵션이 있습니다.Oracle은 DBMS_PARALL_EXECUTE라는 이름의 사용자가 원하는 작업과 유사한 작업을 수행하는 패키지를 도입했습니다.
그들에 따르면, "DBMS_PARALL_EXECUTE 패키지는 사용자가 테이블 데이터를 병렬로 점진적으로 업데이트할 수 있게 해줍니다."사용 방법에 대한 꽤 좋은 요약은 여기에 있습니다.
기본적으로 Oracle이 작업을 분할하는 데 사용할 방법을 정의합니다(이 경우에는 핵심 값을 전달하는 것으로 보입니다). 그러면 Oracle은 각 작업을 개별적으로 시작합니다.물론 사용하기 위해서는 약간의 계획과 약간의 추가 코딩이 필요하지만, 어떤 것도 해서는 안 되는 것은 없습니다.
이와 같이 승인된 방법을 사용할 경우 Oracle은 각 독립 스레드를 모니터링하는 데 사용할 수 있는 데이터베이스 보기도 제공할 수 있습니다.
병렬(멀티 스레드) PL/SQL을 수행하는 또 다른 방법은 다음과 같습니다.
http://www.williamrobertson.net/documents/parallel-plsql-launcher.html
dbms_job 또는 dbms_schedular를 사용할 때의 단점은 작업이 언제 완료되는지 잘 모른다는 것입니다.나는 당신이 신경쓰지 않는다고 읽었지만, 아마도 당신은 앞으로 당신의 생각을 바꿀 것입니다.
편집:
이 기사 http://www.devx.com/dbzone/10MinuteSolution/20902/0/page/1 은 또 다른 방법을 설명합니다.그것은 사용합니다.dbms_job
그리고.dbms_alert
알림은 작업이 완료되었음을 알리는 데 사용됩니다(콜백 신호).
다음은 플랫 파일로 데이터를 언로드하는 다양한 방법에 대한 설명입니다.한 가지 방법은 PL/SQL로 병렬 실행을 수행하여 작업 속도를 높일 수 있는 방법을 보여줍니다.
http://www.oracle-developer.net/display.php?id=425
여기에 나열된 askTom의 병렬 파이프라인 접근 방식은 더 복잡한 접근 방식을 제공하지만 DBMS Job 기법과 달리 작업이 완료될 때까지 실제로 일시 중지됩니다.즉, "비동기적" 기술을 요청하셨고 DBMS_JOB가 이에 적합합니다.
Oracle Advanced Queuing 사용을 고려해 보셨습니까?
언급URL : https://stackoverflow.com/questions/576802/can-we-use-threading-in-pl-sql
'programing' 카테고리의 다른 글
카트 페이지 "WooCommerce"에서 배송 등급의 제로 레이트 값을 표시하는 방법 (0) | 2023.06.19 |
---|---|
실제(고정/변동 지점) 값을 클램프하는 가장 빠른 방법은 무엇입니까? (0) | 2023.06.14 |
Oracle, 날짜 시간을 해당 월의 첫 번째 요일로 지정 (0) | 2023.06.14 |
'' 항목이 이미 추가되었습니다. 오류 (0) | 2023.06.14 |
Oracle Bug 데이터베이스는 어디에 있습니까? (0) | 2023.06.14 |