不為人知的技術(shù)--Oracle并行異步執(zhí)行存儲過程

背景:

秀嶼ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

最近遇到一個case,Client端程式調(diào)用存儲過程SP1,過程SP1執(zhí)行完成后返回結(jié)果到Client。

因為過程SP1執(zhí)行時間要5秒鐘,時間太長Client用戶無法接受。

分析主過程SP1性能,發(fā)現(xiàn)主要是其中調(diào)用的子過程SP2執(zhí)行需要4秒,且子過程SP2中一條SQL因為資料量巨大邏輯復(fù)雜已無優(yōu)化可能。另外子過程SP2的主要是計算審計功能并記錄日志作用的。

設(shè)想:

能否讓用戶執(zhí)行主過程時不等子過程完成就 直接返回結(jié)果 ,子過程異步方式在后臺慢慢的運(yùn)行?

直接通過Oracle的技術(shù)能否實現(xiàn)?

答案是可以的,通過DBMS_JOB.SUBMIT 下面的方法可以實現(xiàn)。

實現(xiàn):

創(chuàng)建log表:

CREATE TABLE SFIS1.JOBSUBMIT_LOG
(
  EXE_TIME  DATE,
  DATAX     VARCHAR2(5 BYTE)
)

創(chuàng)建子過程:

CREATE OR REPLACE PROCEDURE SFIS1.JOB_SUBMIT (DATA3  IN  VARCHAR2)
IS
BEGIN
    IF DATA3='1' THEN
        dbms_lock.sleep(10); --模擬子過程執(zhí)行10秒需要
        insert into sfis1.jobsubmit_log values(SYSDATE,DATA3);
    ELSE
        insert into sfis1.jobsubmit_log values(SYSDATE,DATA3);
    END IF;
    commit;
EXCEPTION
   WHEN OTHERS
   THEN
    DBMS_OUTPUT.PUT_LINE('FAIL2!');       
END;

創(chuàng)建主過程:

CREATE OR REPLACE PROCEDURE SFIS1.JOB_SP (DATA1  IN  VARCHAR2,DATA2  IN  VARCHAR2)
IS
   START_TIME   DATE;
   l_job        NUMBER;
BEGIN
   START_TIME := SYSDATE;
   DBMS_OUTPUT.PUT_LINE ('Start Time:' || TO_CHAR (START_TIME, 'YYYY-MM-DD-HH24:MI:SS'));
   DBMS_JOB.submit (l_job, 'SFIS1.JOB_SUBMIT('||data1||');');
   DBMS_JOB.submit (l_job, 'SFIS1.JOB_SUBMIT('||data2||');');
   COMMIT;
   DBMS_OUTPUT.PUT_LINE ('Elapsed Time:' || CEIL ( (SYSDATE - START_TIME) * 24 * 60 * 60)); --計算主過程運(yùn)行總時間
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.PUT_LINE ('FAIL!');
END;

執(zhí)行主過程:

exec SFIS1.JOB_SP('1','2');

結(jié)果:

Start Time:2019-06-04-10:11:12
Elapsed Time:0 --執(zhí)行時間0秒,說明子過程已經(jīng)異步在后臺執(zhí)行了,主過程并沒有等待子過程執(zhí)行完成

查詢log表:

select * from sfis1.jobsubmit_log;

2019/6/4 10:11:13     2
2019/6/4 10:11:23     1   --進(jìn)一步說明子過程異步在后臺執(zhí)行

以上,主要通過 DBMS_JOB.SUBMIT 并行異步后臺執(zhí)行存儲過程。

本文使用技術(shù)主要參考Tom大師:

https://asktom.oracle.com/pls/asktom/asktom.search?tag=execute-procedures-concurently-in-a-procedure
 

新聞名稱:不為人知的技術(shù)--Oracle并行異步執(zhí)行存儲過程
本文URL:http://bm7419.com/article14/gipdge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計靜態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)