技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Oracle --> 如何提高Oracle进程的优先级 - 实现进程实时调度

如何提高Oracle进程的优先级 - 实现进程实时调度

浏览:1704次  出处信息

   在繁忙的系统中,我们总是会期望提高某些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,则保证了这两个任务可以循环执行,保证了公平。

  •    供参考。


建议继续学习:

  1. PHP运算符优先级的一个例外    (阅读:2205)
  2. JavaScript逻辑运算符及优先级    (阅读:1794)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1