mashiguang

          小馬快跑

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

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

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

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

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

          常用函數:

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

          isumbit()

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

          change(),改變已有作業的參數。

          what(),改變作業要執行的代碼。

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

          interval(),改變作業執行的時間間隔。

          broken(),暫停執行作業。

          run(),強制執行作業。

          最常用的submit()函數:

          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函數參數:

          job,作業的作業號,是個輸出參數,所以調用submit函數時,這個參數要指定一個已存在的變量。

          what,作業要執行的代碼,一般是存儲過程。

          next_date,下一次作業運行的日期。

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

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

          instance,指明運行作業的數據庫實例。

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

          示例:

          var jobno number;

          begin

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

          commit;

          end;

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

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

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

          評論

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

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

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

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

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

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


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


          網站導航:
           
          主站蜘蛛池模板: 济源市| 鹤庆县| 常宁市| 梁平县| 永嘉县| 广东省| 威远县| 甘肃省| 和政县| 张掖市| 五华县| 大埔县| 南召县| 游戏| 汉中市| 鹤壁市| 兴化市| 澎湖县| 蓝田县| 武汉市| 波密县| 义乌市| 禄丰县| 孟连| 山东省| 兴安县| 哈巴河县| 泽州县| 临朐县| 潼南县| 盐源县| 扶风县| 六盘水市| 察隅县| 吉木萨尔县| 东丰县| 伊金霍洛旗| 新闻| 神木县| 峡江县| 新乐市|