oracle中Window和Window Group

xwdreamer發表於2014-08-07

參考文獻:

http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-window.shtml

window概念

  此Windows非彼Windows,通常說的Windows是指蓋首富的作業系統,而此處所說的Windows,是指SCHEDULER特性中的一個子項。在SCHEDULER中,WINDOW對應的是一個時間視窗的概念。

  我們知道普通的jobs是沒有執行時間管理地概念的,就是說一個job啟動之後,使用者只能被動地等待其執行,一直到其執行地任務完成(或DBA手動kill對應程式),在此期間,執行的job將與其它活動的程式共同競爭當前系統中的資源。對於大型資料庫系統,系統資源那可是相當寶貴的無形資產哪,豈能誰說用就用、想什麼時候用就什麼時候用,沒點兒計劃沒點兒節制這還了得。你還別說,在9i之前,還真就是這麼回事兒,誰想用就用,誰也管不了,其中表示最甚的就是job。你是否想起了Job Classes,沒錯定義Job Classes確實可以控制job能夠使用的資源,不過單單使用Job Classes並不能靈活的控制job在合適的時間使用適當的資源。進入10g之後,SCHEDULER中提供了WINDOW,事情終於有了緩解。

  WINDOW 可以指定一個時間視窗,在此期間,透過與Job Classes的搭配組合,能夠有效控制job執行時支配(使用)的資源。比如說job通常是在凌晨伺服器負載較低時執行,那麼就可以透過WINDOW設定在此期間,允許jobs使用更多的系統資源,而到了工作時間後,如果job仍未執行完成,為其分配另一個有限的資源,以儘可能降低job執行佔用的資源對其它業務的影響。

windows group概念

  除了WINDOW外,還有一個與WINDOW有關係的叫WINDOW GROUP,一個WINDOW GROUP可能包 含多個WINDOW。使用WINDOW GROUP的本意是這樣的,假如說某個job執行的時間比較長,甚至全天24小時都在執行,對於這類job,單個WINDOW很難有效調整其資源佔用,這時間呢,就可以透過設定一個WINDOW GROUP,該WINDOW GROUP中包含了多個WINDOW,每個WINDOW分別負責不同時間點時的資源使用計劃。

  然後在建立JOB時,指定schedule_name引數為WINDOW GROUP的名稱(想不到SCHEDULE_NAME還能指定為WINDOW GROUP哪,其實何止WINDOW GROUP,還可以直接指定成WINDOW哪),這樣,就可以透過很簡單的方式,將job與window聯絡在一起了。

  WINDOW GROUP 的建立和管理與前面介紹的方式極其相似:

  • 建立,使用CREATE_WINDOW_GROUP過程;
  • 刪除,使用DROP_WINDOW_GROUP過程;
  • 新增WINDOW成員,使用ADD_WINDOW_GROUP_MEMBER過程;
  • 刪除WINDOW成員,使用REMOVE_WINDOW_GROUP_MEMBER過程;
  • 啟用,使用ENABLE過程;
  • 禁用,使用DISABLE過程;

  這些過程的呼叫方式也都非常簡單,這裡就不著重演示了,感興趣的朋友不妨自行嘗試。

 

相關文章