一般來說,Oracle 數(shù)據(jù)庫都屬于中大型的系統(tǒng),這類系統(tǒng)的用戶會話(Session),小則一兩百,多則上千,這些用戶會話要求 Oracle 數(shù)據(jù)庫執(zhí)行的任何指令都需要耗費系統(tǒng)資源,而系統(tǒng)資源畢竟是寶貴且有限的,一旦突然涌進大量的用戶會話,對于有限的資源可能會略顯不足。但這些會話必定有輕重緩急之分,對于重要且緊急的用戶會話需求理當(dāng)獲得多一點的系統(tǒng)資源,對于一些不重要或不緊急的用戶會話,則可以使用較少的系統(tǒng)資源慢慢處理。
有鑒于此,Oracle 數(shù)據(jù)庫資源管理器(Database Resource Manager)應(yīng)運而生,Oracle 數(shù)據(jù)庫資源管理器的主要功能,就是在有限的系統(tǒng)資源下,能夠讓數(shù)據(jù)庫管理員有效且適當(dāng)?shù)匾?guī)劃用戶對于系統(tǒng)資源的利用,避免資源的過度耗費。在功能上,數(shù)據(jù)庫資源管理可以利用 CPU 的使用量、使用的并行度、閑置的時間、會話總數(shù),以及運行時間等來控制資源的使用。
數(shù)據(jù)庫環(huán)境中,一定會存在同時有多個用戶對數(shù)據(jù)庫進行作業(yè)的情況,而這些需求要執(zhí)行的作業(yè)所耗費的時間與優(yōu)先級必定不同,因此,就可利用數(shù)據(jù)庫資源管理根據(jù)各用戶會話的需求與應(yīng)用屬性分成不同的組,然后依照不同需求與應(yīng)用屬性組,分配不同的數(shù)據(jù)庫系統(tǒng)資源,這樣就可以將有限的資源做最大的利用。數(shù)據(jù)庫資源管理的組成要素如下。
資源使用者組(Resource Consumer Group):是由許多用戶會話組成,這些會話有相同的資源使用請求。當(dāng)新建立一個會話時,RDMB 會根據(jù)您的設(shè)置自動把它分配到某個組。數(shù)據(jù)庫管理員還可以手動調(diào)整某個會話所屬的組。當(dāng)一開始用資源使用者組時,會有三個特別的資源使用者組,這些組不能被修改或刪除,其相關(guān)定義如下。
1.SYS_GROUP:屬于 Oracle 數(shù)據(jù)庫系統(tǒng)管理 SYS 與 SYSTEM 的資源使用者組。
2.DEFAULT_CONSUMER_GROUP:如果有用戶沒有指定到用戶組,則該用戶屬于 DEFAULT_CONSUMER_GROUP。
3.OTHER_GROUP:原則上,OTHER_GROUP 不能算是一個資源使用者組,因為它的使用方式是,當(dāng)某個資源使用者組沒有資源計劃(Resource Plan)時,其組成員默認會指定給 OTHER_GROUP。
資源計劃指令(Resource Plan Directive):是使用資源的條件,如分配給某個特定的資源使用者組,使其在某個特定的時段可使用 80% 的 CPU,或是限制某個使用者組活動會話的數(shù)量等,而資源指令只是被包含在資源計劃中,資源計劃和指令間有著一對多的關(guān)系,在資源計劃中不能包含兩條相同的指令。
資源計劃(Resource Plan):包含一系列指令,這些指令決定了每個使用者組的資源使用分配,在一個數(shù)據(jù)庫中,同一段時間內(nèi)只能啟用一個資源計劃,但一個資源計劃還可以包含多個子資源計劃,每個資源計劃都必須包含給 OTHER_GROUP 分配的指令。
以上就是數(shù)據(jù)庫資源管理的三個組成要素。如應(yīng)用在實際的例子上,假設(shè)有一套數(shù)據(jù)庫系統(tǒng)必須執(zhí)行聯(lián)機事務(wù)處理系統(tǒng)(Online Transaction Processing,OLTP)與報表系統(tǒng),但由于上班時間的事務(wù)量比較大,因此,可將 70% 的資源使用分配給 OLTP 應(yīng)用,而報表系統(tǒng)可分配 20% 的使用資源,剩下的 10% 就分配給其他沒有在資源計劃內(nèi)的組所使用,如圖所示。
圖中顯示,此資源計劃在白天時分配給 OLTP 用戶組 70% 的 CPU 使用資源,給 REPORTING 用戶組 20% 的 CPU 使用資源,剩下的 10% 是給 OTHER_GROUPS 使用,該示例是很單純的資源分配使用方式,但在一般企業(yè)內(nèi)的數(shù)據(jù)庫系統(tǒng)運行時,所遇到的情況可能并不那么單純,此時就可利用子計劃(Subplans)的方式來分配資源,如下圖所示。
上圖顯示,在主要的資源計劃下,有兩個子計劃,分別是 RD 子計劃與 SALES 子計劃。其中 RD 子計劃可使用 40% 的 CPU 資源,而這些資源分別給 Hand Phone 組 60% 的 CPU 資源,與 Note Book 組 40% 的 CPU 資源。在 SALES 子計劃部分可使用 50% 的 CPU 資源,而這些資源分別給 WHOLESALE 組 50% 的 CPU 資源,與 RETAIL 組 50% 的 CPU 資源。
而數(shù)據(jù)庫資源管理的設(shè)置方式,是利用指定的資源比例分配資源給使用者組或是子計劃使用,而可管理的資源內(nèi)容如下。
CPU 使用時間(CPU Timed):數(shù)據(jù)庫資源管理的 CPU 資源分配,是利用使用的 CPU 時間占總 CPU 時間的百分比來分配給不同的資源使用者組,例如,對于數(shù)據(jù)倉庫的應(yīng)用,關(guān)系型聯(lián)機分析處理(Relational Online Analytical Processing,ROLAP)的應(yīng)用所分配到的比例,就應(yīng)該比批處理作業(yè)要高。
活動會話池隊列(Active Session Pool With Queuing):數(shù)據(jù)庫資源管理器可根據(jù)某個資源使用者組的最大會話數(shù)量建立一個運行中的活動會話池(Active Session Pool)。此活動會話池由一群運行中的會話所組成,但對于這些活動會話池有會話數(shù)量的限制,當(dāng)會話池滿時,新的會話會被放入等待隊列,同時可以對這些等待隊列設(shè)置等待的時間上限,當(dāng)時間超過上限時,等待就會停止。
并行度限制(Degree Of Parallelism Limit):可以限制同一組內(nèi)用戶對數(shù)據(jù)庫操作的并行度(Degree Of Parallelism)。
自動轉(zhuǎn)換資源使用者組(Automatic Consumer Group Switching):數(shù)據(jù)庫資源管理器可以在滿足特定的條件時,將用戶會話轉(zhuǎn)到其他的資源使用者組中。
取消 SQL 和終止會話(Cancelling SQL and Terminating Sessions):對于一些長時間運行的 SQL 查詢或用戶會話,數(shù)據(jù)庫資源管理器可以自動將它終結(jié)或是換到其他占用資源比例較低的組中。
預(yù)估運行時間限制(ExecutionTime Limit):Oracle 優(yōu)化器(Optimizer)會估算用戶會話需求的作業(yè)的運行時間,如果超出了特定的值,數(shù)據(jù)庫資源管理器可以阻止此作業(yè)的執(zhí)行。
閑置時間限制(Idle Time Limit):對于一些長時間閑置沒有活動的會話,數(shù)據(jù)庫資源管理器可以設(shè)置相關(guān)的空閑時間上限條件,當(dāng)有會話滿足此條件時,將會自動將此會話切斷。