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