如何提高Oracle進程的優先級 - 實現進程實時調度

發表于:2013-10-10來源:IT博客大學習作者:eygle@eygle.com(eygl點擊數: 標簽:oracle
在繁忙的系統中,我們總是會期望提高某些Oracle進程的優先級,使其能夠更容易的獲得CPU資源,執行重要的任務。在Oracle 10g之前,這樣的工作要通過操作系統上的設置來實現,在Oracle 10gR2中,一個新的隱含參數被引入到數據庫中,用于配置提升Oracle后臺進程

  在繁忙的系統中,我們總是會期望提高某些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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97