Oracle Tuning on AIX (1)

最近因为有项目要上,整理了一下关于在AIX平台上安装Oracle数据库的一些性能方面的建议拿出来跟大家分享。下文内容主要是整理来自IBM的相关白皮书和一些我自己的感悟。限于自身水平,以下写的东西只供参考,不保证都是对的。我不会维护这个文档,IBM和Oracle产品都在不断的更新,很多参数或许以后会不适用了,但我不保证我会更新到这个文档上...
1. Tuning processor performance
1.1 进程调度和优先级(Processscheduling and priority)
在AIX中,默认的调度策略(schedulingpolicy)是: 常规分时调度算法(SCHED_OTHER),采用动态优先级,优先级高的进程优先获得处理器资源,进程拥有处理器后,优先级会随着时间不断减小。在大多数情况,用户不需要手动改变Oracle进程的优先级。
SCHED_OTHER适用于像办公程序,网页浏览器这样的普通的应用,不能用于需要更高确定性的任务。在Oracle RAC 10gR2和11g R1中,一些关键的进程需要运行于特定的调度策略和优先级。
Oracle RAC环境中,oprocd和ocssd.bin进程用于监控在集群中的所有节点的健康状况,这些 进程需要快速的检测并响应集群中可能遇到的故障。所以这两个进程需要一个固定优先级的策略(fixed priority),以便更快的获得处理器资源。
在RAC的数据库环境中,LockManager Server(LMS) 进程缓存data block给在其他节点的进程。如果LMS 进程不能获得它所需要的资源,它将降低整个集群的处理速度,所以LMS进程也需要个固定优先级的策略,相对于其他进程更优先的获得处理器资源。
VKTM是11g引入的一个新进程,他为其它Oracle进程提供timekeeping功能,所以这VKTM进程也使用固定优先级策略。下表11gR1和10gR2线程调度相关的正确值:
Process
Priority
Scheduling policy
Scheduling notation in
ps command output
Oprocd
0(highest priority)
sched_rr(fixed priority)
2
ocssd.bin
1
sched_rr(fixed priority)
0
LMS processes
39
sched_rr(fixed priority)
2
VKTM process
39
sched_rr(fixed priority)
2
我们可以通过ps命令进行检查
ps -efo "pid,user,pri,nice,sched,command"|egrep"PRI|ocssd.bin|oprocd"
ps -efo "pid,user,pri,nice,sched,args"|egrep"PRI|--"
如果优先级不正确,可以检查数据库Cluster的用户ID是否正确设置(CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM和CAP_PROPAGATE)属性。CAP_NUMA_ATTACH是必须的,因为这个属性可以使non-root的进程增加自己优先级。CAP_PROPAGATE属性可以使得父进程传递它的权限给子进程。
通过lsuser命令进行检查:
lsuser -a capabilities oracle
通过chuser命令进行设置相关属性:
chusercapabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
如果LMS和VKTM进程的不正确,需要检查${ORACLE_HOME}/bin/oradism的属主是否为root用户,S 位(s bit)已经设置。
1.2 Processor affinity
在symmetric multiprocessor (SMP)系统中,线程在任意的可用的处理器之间调度执行。如果将进程固定在一个处理器上运行,这称为processor affinity。AIX会尽可能让一个进程在相同的处理器上运行,这样做的好处是获得性能的提升,因为在处理器的L1和L2缓存中已经缓存了该进程的数据,如果进程切换另一个处理器,需要重新读取数据到缓存中。Processor affinity的缺点是处理器之间的负载并不均衡,会导致一些处理器负载过高而一些处理器却很空闲。在有必要的时候AIX会在处理器之间调整调度线程,自动均衡处理器之间的负载,affinity和balance是一对矛盾,AIX自己评估调节,而我们也可以通过资源集(resource set)和处理器绑定(processor binding)来进行手动的affinity。
a.处理器绑定( Processorbinding)
一个进程可以强制只运行在一个特定的处理器上。这么做的好处就是前面提到的affinity的好处,提高cache命中率。但是确定也很明显,这个进程将不能分配到空闲的处理器。AIX的调度已经考虑了affinity的优化,如非必要,不推荐使用处理器绑定。
可以通过bindprocessor命令绑定进程,-q参数显示系统可用的处理器,-u 取消绑定。例如,绑定pid=999的进程到处理器1:
bindprocessor 999 1
bindprocessor -u 999
显示进程999所绑定的处理器号:
ps -o bnd -p 999
b. 资源集(Resourcesets)
从AIX5.2开始,我们可以使用ResourceSet API来限制资源只给一个进程使用。一个资源集 是一些系统资源的集合,可以包含一个或多个处理器,一个或者多个内存池,或是处理器和内存池的集合。和处理器绑定一样,如非必要,让AIX自己来管理调度,而不要限制一个进程在资源集中运行。
创建一个资源集合:
mkrset -c 0-3 test/cpus0to3 <=创建一个名字叫test/cpus0to3的资源集,包含0到3颗处理器。
删除一个资源集:
rmrset test/cpu0to3
显示资源集合的相关信息
lsrset -a <= 显示系统中所有的resource set
lsrset -r test/cpus0to2 -v <=显示test/cpus0to2resource set 的详细信息。
将进程绑定/解除绑定到资源集:
attachrset test/cpu0to2 9999 将pid=9999的进程绑定到资源集test/cpu0to2。
deachrset 9999 接触pid=9999的进程绑定。
Resource set也许可以通过数据库的 v$session和v$process视图找出pid,将占用非常大的进程限制在一个资源集中,而不会影响到其他的session。等我的测试机就绪了可以玩玩这东东。
1.3 小结
AIX版本
推荐设置
AIX 5.3
chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
export AIXTHREAD_SCOPE=S # oracle user
AIX 6.1
chuser capabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle
Tags: 

延伸阅读

最新评论

发表评论