在繁忙的系統中,我們總是會期望提高某些Oracle進程的優先級,使其能夠更容易的獲得CPU資源,執行重要的任務。在Oracle 10g之前,這樣的工作要通過操作系統上的設置來實現,在Oracle 10gR2中,一個新的隱含參數被引入到數據庫中,用于配置提升Oracle后臺進程的優先級。
這個核心參數是: _high_priority_processes
在 10.2 版本中,Oracle 缺省的對 LMS* 設置高優先級,在11g開始,對 LMS*||VKTM 設置高優先級。
在Linux平臺上,進程的內核調用分為三類:
TS - SCHED_OTHER (SCHED_NORMAL) ,這是分時調度策略,缺省的正常級別;
FF - SCHED_FIFO,這是實時調度策略,先到先服務,先進先出;
RR - SCHED_RR,實時調度策略,時間片輪轉;
其中 FF,RR 都是實時調度隊列的,實時進程調度隊列,是從優先級最高的進程運行,如果當前運行的是FIFO進程,如果進程不主動讓出CPU,其他進程都不能運行,如果是RR(時間片輪轉)的,則不會一直獨占CPU,運行一段時間會被切換出來。
以下是在Linux中設置PMON進程提高優先級的測試。
[eygle@enmoteam2 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Aug 9 10:43:50 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1670221824 bytes
Fixed Size 2228944 bytes
Variable Size 402656560 bytes
Database Buffers 1258291200 bytes
Redo Buffers 7045120 bytes
Database mounted.
Database opened.
檢查此時PMON進程的優先級為:TS 。
[eygle@enmoteam2 ~]$ ps -eo pid,class,pri,nice,time,args |grep pmon |grep -v grep
25424 TS 19 0 00:00:00 ora_pmon_enmot2
設置PMON進程,重新啟動數據庫:
SQL> alter system set "_high_priority_processes"="PMON" scope=spfile;
System altered.
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1670221824 bytes
Fixed Size 2228944 bytes
Variable Size 402656560 bytes
Database Buffers 1258291200 bytes
Redo Buffers 7045120 bytes
Database mounted.
Database opened.
此時檢查,可以發現PMON進程運行在RR模式:
SQL> ! ps -eo pid,class,pri,nice,time,args |grep pmon |grep -v grep
26222 RR 41 - 00:00:00 ora_pmon_enmot2
在Solaris下有所不同,高優先級進程運行在RT模式 - Real Time,實時模式:
SQL> show parameter pri
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_high_priority_processes string LMS*|LGWR|PMON
oracle@solaris:$ ps -eo pid,class,pri,nice,time,args |egrep 'lgwr|pmon' |grep -v grep
27674 RT 101 RT 00:00 ora_pmon_orcl
27694 RT 101 RT 00:00 ora_lgwr_orcl
注意,在RAC系統中,LMS*可能會導致一系列的LMS進程都獲得高優先級,這可能是不必要的,也會搶占其他進程的資源,所以可以根據具體情況進行設置。
當系統中既有分時調度 - TS,又有時間片輪轉調度(RR)和先進先出調度(FF)時,以下是一些細節上的說明:
當實時進程準備就緒后,如果當前CPU正在運行非實時進程,則實時進程立即搶占非實時進程;
RR進程和FIFO進程都采用實時優先級做為調度的權值標準,RR實際上是FIFO的一個延伸;
FIFO時,如果兩個進程的優先級一樣,則這兩個優先級一樣的進程具體執行哪一個是由其在隊列中的位置決定的,這樣導致一些不公正性,如果將兩個優先級一樣的任務的調度策略都設為RR,則保證了這兩個任務可以循環執行,保證了公平。
原文轉自:http://blogread.cn/it/article/6669