<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    mashiguang

    小馬快跑

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      20 隨筆 :: 0 文章 :: 60 評論 :: 0 Trackbacks
     

    最近公司客戶反映有些頁面運行速度太慢,通過對系統(tǒng)代碼的分析,發(fā)現(xiàn)排行榜功能是罪魁禍首,因為數(shù)據(jù)量太大,每次刷新頁面都計算一次排行榜,的確耗時費力。

    其實可以讓數(shù)據(jù)庫自己計算排行榜,并把計算結(jié)果保存到一個單獨的表里去,這個表只用來保存排行榜的數(shù)據(jù),數(shù)據(jù)量很小,然后所有的排行榜查詢都去select這個表。

    計算排行榜的功能我們可以寫成一個存儲過程,但是排行榜的數(shù)據(jù)不是一成不變的,還需要不時的調(diào)用這個存儲過程才行,oracle為我們提供了dbms_jobs。

    oracel dbms_jobs包可以提交作業(yè)到作業(yè)隊列中,這個包中還提供其它一些函數(shù)管理以前提交的作業(yè),如對作業(yè)進行修改、禁止或刪除等操作。

    常用函數(shù):

    submit(),提交作業(yè)到作業(yè)隊列。

    isumbit(),

    remove(),從作業(yè)隊列中刪除作業(yè)。

    change(),改變已有作業(yè)的參數(shù)。

    what(),改變作業(yè)要執(zhí)行的代碼。

    next_date(),改變作業(yè)下一次執(zhí)行時間。

    interval(),改變作業(yè)執(zhí)行的時間間隔。

    broken(),暫停執(zhí)行作業(yè)。

    run(),強制執(zhí)行作業(yè)。

    最常用的submit()函數(shù):

    dbms_jobs.submit(

           job out binary_integer,

           what in varchar2,

           next_date in date default sysdate,

           interval in varchar default null,

           no_parse in boolean default false,

           instance in binary_integer default any_instance,

           force in boolean default false

    );

    submit函數(shù)參數(shù):

    job,作業(yè)的作業(yè)號,是個輸出參數(shù),所以調(diào)用submit函數(shù)時,這個參數(shù)要指定一個已存在的變量。

    what,作業(yè)要執(zhí)行的代碼,一般是存儲過程。

    next_date,下一次作業(yè)運行的日期。

    interval,作業(yè)執(zhí)行的間隔時間,這個參數(shù)默認值是null也就是what指定的代碼只在next_date這一時間執(zhí)行一次。

    no_parse,默認值是false,當參數(shù)值是false,提交作業(yè)時就對what指定的代碼進行語法分析;當參數(shù)值是true,第一次運行what指定代碼時才進行語法分析。

    instance,指明運行作業(yè)的數(shù)據(jù)庫實例。

    force,如果是true,instance可以是任何正數(shù);如果是false,instance指定的實例必須正在運行。

    示例:

    var jobno number;

    begin

    dbms_job.submit(:jobno,'p_xxx_taxis;',trunc(sysdate)+(18/24),'trunc(sysdate+1,''hh'')');--每天18點執(zhí)行

    commit;

    end;

    上面這段話要在 命令窗口 下運行,如在pl/sql developer里面的-->新鍵-->命令窗口

    這樣就會在每天的18點執(zhí)行存儲過程p_xxx_taxis。在我這里p_xxx_taxis執(zhí)行的是計算排行榜的任務。

    posted on 2008-07-14 16:56 mashiguang 閱讀(4132) 評論(6)  編輯  收藏

    評論

    # re: oracel dbms_jobs的使用 2008-07-14 18:19 bt
    java的效率本來就不好,數(shù)據(jù)量大一點就不行了。呵呵。  回復  更多評論
      

    # re: oracel dbms_jobs的使用 2008-07-15 13:30 lan
    排行榜之類的東西,本身就不應當是實時的,本身就不是頁面去做的。
    應當每隔一段時間在后臺作一次,葉面僅僅是取結(jié)果。
    如果做成實時的,系統(tǒng)肯定會受不了,當然專業(yè)網(wǎng)站除外。  回復  更多評論
      

    # re: oracel dbms_jobs的使用 2008-07-15 14:50 mashiguang
    謝謝樓上的回復.
    寫這篇文章目的主要是記錄oracel dbms_jobs的使用方法,不是記錄排行榜這類東西用什么方案實現(xiàn).  回復  更多評論
      

    # re: oracel dbms_jobs的使用[未登錄] 2008-07-26 13:59 paul
    不知lz是怎么更新的,是先將原table數(shù)據(jù)刪除,在將排好的數(shù)據(jù)insert,如果這樣的話,到了定時更新時間后臺正在更新。會不會造成前臺無數(shù)據(jù)顯示啊  回復  更多評論
      

    # re: oracel dbms_jobs的使用 2008-07-28 10:14 mashiguang
    樓上說的是,的確會出現(xiàn)無數(shù)據(jù)顯示的情況,我選擇每天18點運行,是因為這個頁面主要是美國的客戶訪問,估計他們不會大清早的訪問這個頁...
    但這種情況也不是肯定不會發(fā)生,有更好的辦法嗎?
      回復  更多評論
      

    # re: oracel dbms_jobs的使用 2008-07-28 10:21 mashiguang
    先insert,再delete,查的時候倒序只要最后10條.  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品乱码久久久久久V | 亚洲男人天堂av| 天天影院成人免费观看| 亚洲第一街区偷拍街拍| 精品亚洲综合久久中文字幕| 青青视频观看免费99| 一级A毛片免费观看久久精品| 亚洲免费在线播放| 国产精品视频免费一区二区三区| 在线看片免费人成视频久网下载| 亚洲人成免费电影| 久久久久亚洲AV成人网人人网站| 免费看h片的网站| 一边摸一边桶一边脱免费视频 | 亚洲人成在线免费观看| 免费在线人人电影网| 亚洲精品视频专区| 亚洲欧洲一区二区三区| 国产福利视精品永久免费| 国产国产人免费人成成免视频| 亚洲av产在线精品亚洲第一站| 国产偷国产偷亚洲高清日韩| 男人的好看免费观看在线视频| 精品国产免费人成网站| 亚洲人成自拍网站在线观看| 亚洲伦理一区二区| 亚洲综合色区在线观看| 成人毛片18女人毛片免费96| 久久一区二区三区免费播放 | 国产精品观看在线亚洲人成网| 亚洲精品自拍视频| 亚洲av无码国产精品色午夜字幕 | 国产免费网站看v片在线| 日韩色视频一区二区三区亚洲| 久久久久亚洲AV无码专区首JN| 亚洲综合另类小说色区| 免费一看一级毛片全播放| 四虎影院在线免费播放| 日韩精品无码区免费专区| 一级毛片免费视频| 97人妻精品全国免费视频 |