aix系统性能管理及oracle案例分析.docx

上传人:牧羊曲112 文档编号:1662053 上传时间:2022-12-13 格式:DOCX 页数:43 大小:178.78KB
返回 下载 相关 举报
aix系统性能管理及oracle案例分析.docx_第1页
第1页 / 共43页
aix系统性能管理及oracle案例分析.docx_第2页
第2页 / 共43页
aix系统性能管理及oracle案例分析.docx_第3页
第3页 / 共43页
aix系统性能管理及oracle案例分析.docx_第4页
第4页 / 共43页
aix系统性能管理及oracle案例分析.docx_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《aix系统性能管理及oracle案例分析.docx》由会员分享,可在线阅读,更多相关《aix系统性能管理及oracle案例分析.docx(43页珍藏版)》请在三一办公上搜索。

1、AIX 5.3主机性能评估 对于AIX主机的性能评估,我们从下面的4个方面来逐一介绍:CPU、MEMORY、I/O系统和网络这4个方面来描述。一、CPU性能评估 首先,我们还是先来看一下CPU的性能评估。下面先主要介绍几个看CPU性能的命令。1、使用vmstat来进行性能评估,该命令可获得关于系统各种资源之间的相关性能的简要信息。当然我们也主要用它来看CPU的一个负载情况。 下面是我们调用vmstat命令的一个输出结果:$vmstat 1 2 System configuration: lcpu=16 mem=23552MBkthr memory page faults cpu - - - -

2、 - r b avm fre re pi po fr sr cy in sy cs us sy id wa 0 0 3091988 2741152 0 0 0 0 0 0 1849 26129 4907 8 1 88 3 0 0 3091989 2741151 0 0 0 0 0 0 2527 32013 6561 15 2 77 6 对上面的命令解释如下:Kthr段显示内容r列表示可运行的内核线程平均数目,包括正在运行的线程和等待 CPU 的线程。如果这个数字大于 CPU 的数目,则表明有线程需要等待CPU。b列表示处在非中断睡眠状态的进程数。包括正在等待文件系统 I/O 的线程,或由于内存

3、装入控制而被挂起的线程。Memory段显示内容avm列表示活动虚拟内存的页面数,每页一般4KBfre空闲的页面数,每页一般4KBPage段显示内容re 该列无效pi 从磁盘交换到内存的交换页(调页空间)数量,4KB/页。调页空间是驻留在硬盘上的虚拟内存的一部分。当内存使用过量时,会将溢出的工作组页面存储到调页空间中(窃取页)。当进程访问一个窃取页时,就产生了一个缺页故障,而这一页页必须从调页空间中读入到内存中。po 从内存交换到磁盘的交换页数量,4KB/页。如果窃取的工作也在调页空间中不存在或者已经作了修改,则写入调页空间中。如果不被再次访问,它会留在调度空间中直到进程终止或者放弃空间。fr

4、根据页面替换算法每秒释放的页数。当VMM页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它会根据一些条件选取需要窃取的页面以补充空闲列表。该条件中包含工作页面和计算页面,释放的页面中,计算页面不产生I/O,工作页面如果数据没有发生修改,也不需要写回磁盘,也不会产生I/O。sr 根据页面替换算法每秒所检查的页数。sr值比fr值高的越多,说明替换算法要查找可以替换的页面就越困难。cy 每秒页面替换代码扫描了PFT多少次。因为增加空闲列表达到maxfree值,不一定需要完全扫描PFT表,而所有vmstat输出都为整数,所以通常cy列值为0。Faults段显示内容(其实这段内容

5、不需太多关注)in 在该时间间隔中观测到的每秒设备中断数。sy 在该时间间隔中观测到的每秒系统调用次数。cs 在该时间间隔中观测到的每秒钟上下文切换次数。Cpu段显示内容us 列显示了用户模式所消耗的 CPU 时间。sy 列详细显示了 CPU 在系统模式所消耗的 CPU 时间。id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待时间的百分比。wa 列详细显示了有未决本地磁盘 I/O 时 CPU 空闲的时间百分比。wa 的值如果超过 25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷很重的结果。如果在一个单用户系统中,us + sy时间不超过 90%,我们就不认为系

6、统的CPU是受限制的。如果在一个多用户系统中,us + sy时间超过 80%, 我们就认为系统的CPU是受限的。其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。检查cpu,我们主要关注报告中的4个cpu列和2个kthr(内核线程)列。在上面的示例中,我们可以观察到以下几个主要的信息:CPU IDLE比较高,比较空闲;r列为0,表明线程不存在等待;WA值不高,说明I/O压力不大;free值比较大,pi,po为0,表明内存非常富裕。空闲较多。2、第二个常用的是 sar命令,但是sar会增加系统的开销。当然有些情况下,我们使用sar比较方便。sar的输出结果与前面的基本类似,这里不再

7、作详细的介绍,关于命令的语法,也不再作详细的介绍,我们常用的命令格式:#sar 1 2AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07System configuration: lcpu=16 17:52:26 %usr %sys %wio %idle physc17:52:27 19 7 0 75 8.0017:52:28 19 6 0 75 8.01Average 19 7 0 75 8.01在这里,sar命令输出的是一个整体的cpu使用情况的一个统计,统计分项目的内容也比较直观,通过名字就可以理解涵义。这里有一点比较方便的就是,在最后一行有一个汇总的ave

8、rage行,作为上述统计的一个平均。另外,补充说明一点的就是,一般来说,第一行统计信息包含了sar命令本身启动的cpu消耗,所以往往是偏高的,所以导致average值也往往是偏高一点的。当然,这不会对结果产生多大影响。当我们有多个cpu的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查发现,cpu总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一个cpu,导致这个cpu100占用,处理不过来,而其他的cpu却闲置。这时可以对cpu分开查询,统计每个cpu的使用情况。#sar -P ALL 1 2Sar还有其他一些比较特殊的使用方法,比如:如果希望多个采样和多个报告

9、,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式为:sar -A -o /temp/sar_result.log 5 300 /dev/null & 关于sar其他的一些使用方法,这里不再详述。3、第三个可以用来使用的命令是iostat.$ iostat -t 2 4tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 0.0 0.0 0.1 99.8 0.1 0.0 81.0 0.0 0.1 99.9 0.0 0.0 40

10、.5 0.0 0.0 100.0 0.0 0.0 40.5 0.0 0.1 99.1 0.8TTY 的两列信息(tin 和 tou)显示了由所有 TTY 设备读写的字符数CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用情况。 注意:第一份报告为系统启动以来的一个累积值。4、使用tprof命令用于统计每个进程的CPU使用情况# tprof -x sleep 30该命令的输出结果可查看 _prof.all文件。此命令运行30秒钟,在当前目录下创建一个名为_prof.all 的文件。30秒钟内, CPU被调度次数约为3000次。_prof.al

11、l 文件中的字段Total 为此进程调度到的CPU次数。如果进程所对应的 Total字 段的值为1500,即表示该进程在3000次 CPU调度中占用了1500次,或理解为使用了一半的CPU时间。tprof的输出准确地显示出哪个进程在使用CPU 时间。在我下面的这一份示例中,可以看到,大部分的cpu时间都是被wait所占用的。这里的wait实际上是idle进程,可以表明这个系统是一个完全空闲的系统。在AIX 5L下,你用ps aux会发现有一些root的wait进程#ps aux |head -20wait就是CPU空闲的时候运行的空闲进程,AIX4上叫kproc。所以这个进程占用越大,表示机器

12、越空闲。Wait进程的数量是由机器上的逻辑CPU的个数决定的,有几个逻辑CPU,就有几个wait进程.5、ps这个命令使用本身也比较复杂,在这里只介绍如何查看cpu占用最高的进程。例如下:#ps aux | head -25在这个输出结果中,排在前面的是16个root用户的wait进程,这其实是CPU空闲的时候运行的空闲进程,之前已作说明。所以CPU最高的几个进程其实是下面的ORACLE用户的ora_j00*进程,这是ORACLE的job进程。在这里,这些进程的开销很小。如果ORACLE的进程开销比较大,我们可以用如下的方法来查询具体的进程在干什么事情,例如我们要查询进程ora_j000_or

13、a92,PID=344612,可以使用下面的方法:$su oracleSQLsqlplus “/as sysdba”SQLoradebug setospid 344612SQLoradebug event 10046 trace name context forever, level 8SQLoradebug tracefile_name 这个命令我们获得输出文件的绝对路径和文件名SQLoradebug event 10046 trace name context off$tkprof /opt/oracle/app/oracle/admin/ora92/bdump/ora92_j000_34

14、4612.trc tracepid.txt$more tracepid.txt在tracepid.txt中,我们就可以看到这个进程中具体运行的语句、过程等,以及所有的SQL的cpu消耗、物理读、逻辑读、执行计划等信息。另外,我们也可以执行下面的语句查看进程具体运行的SQL语句的文本:SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN ( SELECT DECODE (sql_hash_value,0, prev_hash_value,sql_hash_value), DECODE

15、(sql_hash_value,0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = &pid)ORDER BY piece ASC6、解决CPU占用的惩罚机制nice和renice指定和修改命令的优先级。系统中运行的每个进程都有一个优先级,我们可以用ps命令看到,这个优先级为PRI,PRI的值越小,优先级越高,能占用更多的CPU时间片。系统默认的PRI为60,我们可以通过nice命令和renice命令来改变一个进程的优先级,从而控

16、制进程对CPU时间片的占用。任何一个用户都可以使用nice命令来使他的进程以低于系统默认的pri运行。但是只有root用户才可以使进程以高于默认的pri运行。我们先来看一下nice命令的使用方法:#nice n -5 vmstat 2 10 vmstat.out# ps -elF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD200001 A 0 704738 1523728 0 55 15 aee1400 544 f100009e63c23e30 pts/1 0:00 vmstat指定程序以nice值-5开始运行。程序开始后,nice的值

17、为15,PRI的值为55。nice命令可以指定的范围为-20 (最高优先级)到 20 (最低优先级)。在AIX5.3中,默认的nice为20。# vmstat 2 10 vmstat.out# ps -elF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD200001 A 0 704740 1523728 0 60 20 32ec6400 472 f100009e63c23e30 pts/1 0:00 vmstat64 可以看到默认的情况下,系统使用的nice=20,pri=60 。实际上在nice指定的时候,也可以使用超出闭区间-20,2

18、0的值如:#nice n -33 vmstat 2 10 vmstat.out# ps -elF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD200001 A 0 319652 1523728 0 40 0 82ef0400 544 f100009e63c23e30 pts/1 0:00 vmstat64我们指定的nice小于-20,得到最高的优先级(pri=40)。反之,如果我们指定nice的值超过20,比如nice=21,我们将得到最低的优先级值pri=100。renice不能在具有固定优先级的进程上使用。非root用户可以在一个或多

19、个运行进程的nice值上加一个指定的值,但不能从中减去指定的值。也就是只能降低进程的优先级,而不能增加优先级。renice -n -10 pidnumber ,将指定的进程nice值减小10。renice -n +5 pidnumber ,将指定的进程nice值增加5。根据nice值的不同取值,这里renice的值可以取值的范围是闭区间-40,40 。为什么取值范围是这个呢?我们可以这样来理解,通过ps l命令,我们可以看到NI的取值范围是闭区间0,40,我们使用renice需要改变的也就是整个值,考虑两个极端的情况,假如现在为0,我们要把它改到40,就必须得renice n 40,如果现在是

20、40,我们要把它改为0,则renice的值就得是-40了。当然,跟nice一样,在这里renice的值在命中使用的时候也可以超出这个闭区间,不会报错,但有效的结果只落在这个闭区间内。# ps l 1630282FSUID PID PPID C PRI NI ADDR SZ RSS WCHAN TTY TIME CMD200001 A 0 1630282 680062 0 100 40 413e8400 472 484 EVENT pts/1 0:00 v# renice -n -30 1630282# ps l 1630282FSUID PID PPID C PRI NI ADDR SZ RS

21、S WCHAN TTY TIME CMD200001 A 0 1630282 680062 0 50 10 413e8400 472 484 EVENT pts/1 0:00 v我们可以总结一下,pri值的取值公式大概如下:优先级值(PRI)= 基本优先级(60)nice损失 基于最近CPU使用情况的CPU损失总的来说nice值越小,进程的优先级越高,能分配到更多的cpu时间片。反之,也成立。7、小结对于系统cpu的监控,建议:1)使用vmstat进行分析2)sar P ALL 1 10 分析,多个cpu间的负载是否平衡3)ps aux 查看4)tprof查看更详细的信息二、Memory性能评

22、估1、VMM简单讲解一下内存以及的VMM的一点工作原理。内存和交换空间一般都是用页面来进行分配和管理的。在内存中存在两类型页面:计算页面(一般为可执行文件段中的页面)和文件页面(存储的数据文件的页面)。当我们执行程序或者读入数据的时候,内存中的页面就逐渐被占用。当空闲的内存只剩maxfree的时候,vmm的调页就被唤醒,通过调页算法,将内存中的页面转移到交换空间中。一直到空闲内存达到maxfree,才停止调页。在这里,我们涉及到两个参数:Minfree:最小空闲页链表尺寸。一旦低于该值,系统偷页以填充页链表,保证有足够的内存页面。偷页就是将不常用的页面替换出去。Maxfree:最大空闲页链表尺

23、寸。一旦高于该值,系统停止偷页。如果发现空闲列表不足,可以用下面的方法增加minfree参数#vmo -o minfree=1000 -o maxfree=1008Setting maxfree to 1008Setting minfree to 1000#vmo o minfree=1000 o maxfree=1008 P # -P参数使修改永久生效一般下,minfree和maxfree通过下面的公式得到:maxfree=minmum(memory/128,128) ,minfree=maxfree-8另外,关于内存的使用,我们还有两个经常碰到的参数需要关注:Minperm:用户I/O文件

24、访问的最小缓冲区页数Maxperm:用户I/O文件访问的最大缓冲区页数Minperm和maxperm这两个参数的默认值分别为20和80。在这里主要与性能相关的是maxperm参数。maxperm参数指定了文件页面可以占用内存的上限,因为文件页面不主动释放,所以很容易造成内存的文件页面过高的占用,导致其他的应用内存使用紧张。调整参数值的方法如下:#vmo -o maxperm%=80 -o minperm%=20Setting minperm% to 20Setting maxperm% to 80查看当前的参数设置方法如下:1)vmo a 显示当前所有的参数设置 #vmo -a cpu_sca

25、le_memp = 8 data_stagger_interval = 161 defps = 1 force_relalias_lite = 0 framesets = 2 htabscale = n/a kernel_heap_psize = 4096 large_page_heap_size = 0 lgpg_regions = 0 lgpg_size = 0 low_ps_handling = 1 lru_file_repage = 1 lru_poll_interval = 10 lrubucket = 131072 maxclient% = 80 maxfree = 1088 ma

26、xperm = 4587812 maxperm% = 80 maxpin = 4881650 maxpin% = 80 mbuf_heap_psize = 4096 memory_affinity = 1 memory_frames = 6029312 memplace_data = 2 memplace_mapped_file = 2memplace_shm_anonymous = 2 memplace_shm_named = 2 memplace_stack = 2 memplace_text = 2memplace_unmapped_file = 2 mempools = 4 minfr

27、ee = 960 minperm = 1146952 minperm% = 20 nokilluid = 0 npskill = 49152 npsrpgmax = 393216 npsrpgmin = 294912 npsscrubmax = 393216 npsscrubmin = 294912 npswarn = 196608 num_spec_dataseg = 0 numpsblks = 6291456 page_steal_method = 0 pagecoloring = n/a pinnable_frames = 5601758 pta_balance_threshold =

28、n/a relalias_percentage = 0 rpgclean = 0 rpgcontrol = 2 scrub = 0 scrubclean = 0 soft_min_lgpgs_vmpool = 0 spec_dataseg_int = 512 strict_maxclient = 1 strict_maxperm = 0 v_pinshm = 0 vm_modlist_threshold = -1 vmm_fork_policy = 1 vmm_mpsize_support = 12)# vmstat -v 6029312 memory pages 5734766 lruabl

29、e pages 2801540 free pages 4 memory pools 406918 pinned pages 80.0 maxpin percentage 20.0 minperm percentage 80.0 maxperm percentage 2.3 numperm percentage 135417 file pages 0.0 compressed percentage 0 compressed pages 0.0 numclient percentage 80.0 maxclient percentage 0 client pages 0 remote pageou

30、ts scheduled 312417 pending disk I/Os blocked with no pbuf 0 paging space I/Os blocked with no psbuf 2878 filesystem I/Os blocked with no fsbuf 0 client filesystem I/Os blocked with no fsbuf 0 external pager filesystem I/Os blocked with no fsbuf显示minperm和maxperm和numperm的值。numperm值给出的是内存中文件页数。系统调页的规则

31、:如果numpermmaxperm,则只调出文件页面。如果numpermminperm,则同时调出文件页面和计算页面。如果minpermnumpermmaxperm,则只调出文件页面,除非新调入的文件页面大于计算页面的总和。 如果系统在向调页空间调出页面,可能使因为内存中的文件页数低于maxperm,从而也调出了部分的计算页面以达到maxfree的要求。在这种情况下,可以考虑把maxperm降低到低于numperm的某个值,从而阻止计算页面的调出。在5.2 ML4以后的版本中,为了防止计算页面被调出,可以采用另外一个方法,就是设置参数lru_file_repage=0。将该参数设为0,则告诉v

32、mm在进行页面替换的时候,优先替换文件页面。maxclient通常应该设置为一个小于或者等于maxperm的值。 增强JFS文件系统为它的缓冲区高速缓存使用客户机文件,这不受maxperm和minperm的影响。为了在限制增强JFS文件系统使用高速缓存,可以指定maxclient的值,避免在它进行页面替换的时候,替换其他类型的页。2.svmon命令# svmon -G -i 2 2 size inuse free pin virtualmemory 2097136 236845 1860291 152150 194943pg space 1048576 960 work pers clnt l

33、pagepin 151904 246 0 0in use 194960 41885 0 0 size inuse free pin virtualmemory 2097136 236853 1860283 152150 194947pg space 1048576 960 work pers clnt lpagepin 151904 246 0 0in use 194964 41889 0 0memory段size 物理内存总页数。4KB/页inuse 物理内存中正在使用的内存页面数。包含活动进程和已经终止的进程的持久文件页面。free 空闲列表中的页面数量pin 锁定在内存中的页面数量(锁定

34、的意思就是不能被替换出去)virtual pg space段size 调页空间总大小inuse 已经分配页的总数,也就是已经使用的调页空间页数pin段work 物理内存中的工作页面数pers 物理内存中的持久页面数clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)inuse段work 物理内存中的工作页面数pers 物理内存中的持久页面数clnt 物理内存中的客户机页面数(客户机页面就是一个远程文件页面)3、ps命令显示当前运行的进程状态信息。运行下列命令,显示内存占用前10位的进程。# ps gv |sort +6b -nr |head -10 2490538 - A 19

35、1:56 0 11840 32748 xx 45762 20924 0.1 0.0 ora_j00 2039970 - A 592:59 11 11728 32648 xx 45762 20924 0.3 0.0 ora_j00 2588922 - A 1118:31 22 11712 32632 xx 45762 20924 0.6 0.0 ora_j0 2523168 - A 305:01 1 11688 32608 xx 45762 20924 0.2 0.0 ora_j00 2474214 - A 0:01 0 11588 32512 xx 45762 20924 0.1 0.0 or

36、a_j00 2007282 - A 0:01 0 10384 31308 xx 45762 20924 0.0 0.0 ora_j00 508120 - A 32:58 662 9344 27164 xx 45762 20924 0.0 0.0 ora_dbw 1351908 - A 0:02 1 5668 26560 xx 45762 20924 0.0 0.0 oracleo 3801250 - A 203:22 0 5648 26556 xx 45762 20924 0.1 0.0 oracleo 3915976 - A 0:00 0 5664 26556 xx 45762 20924

37、0.0 0.0 oracleo 如果是oracle的一些进程占用了过度的内存,我们也可以通过前面类似的进程处理方法来分析。4、内存的调整 具体调整需要结合系统运行的应用程序对症下药,如调整minperm/maxperm将改变内存与PAGING SPACE之间的交换算法,调整minpgahead/maxpgahead将改变内存块请求机制,调整minfree/maxfree将改变内存紧张时的内存清理刷新机制,等等。如果数据库使用裸设备,并且没有太多其他的应用,因为裸设备不需要文件系统的缓存,所以可以降低minperm,maxperm,maxclient的默认值,降低操作系统对内存的不必要的占用。案

38、例:计费数据库数据库响应变慢,内存16G,裸设备,却存在很多的PI,PO情况。在检查与内存相关的系统参数,发现如下问题:minperm% = 20, maxperm% = 80, maxclient% = 80 说明:以上三个参数为系统缺省配置,其表示,使用文件系统时,最多可使用80% * 16G=10.8G,用于缓存所访问的文件。结论:由于以上参数采用系统缺省配置,文件系统缓存最大可以达到10.8G,在执行大量的文件cp操作后,系统的可用内存量迅速下降,在其后的计费过程中,由于大量page in/page out操作引起系统严重性能瓶颈。优化:将maxperm% = 30 ,maxclien

39、t% = 30#vmo o maxperm%=30 P#vmo o maxclient%=30 P三、磁盘的I/O性能评估对磁盘IO的性能考虑:将频繁访问的文件系统和裸设备应尽可能放置在不同的磁盘上。在建立逻辑卷时尽可能使用mklv的命令开关给不同的文件系统和裸设备赋予不同的内策略。使用磁盘设备驱动适配器的功能属性构建合适的RAID方式,以获得更高的数据安全性和存取性能。一般考虑采用RAID5或者RAID10方式,对于写要求比较高的系统,一般建议采用RAID10方式;关于RAID10 与RAID 5的比较,可以见piner的文章,作为补充我会在后面贴出。尽可能利用内存读写带宽远比直接磁盘I/O

40、操作性能优越的特点,使频繁访问的文件或数据置于内存中进行操作处理;在这里,顺带提一下裸设备以及文件系统的对比。裸设备的优点:由于旁路了文件系统缓冲器而进行直接读写,从而具有更好的性能。对硬盘的直接读写就意味着取消了硬盘与文件系统的同步需求。这一点对于纯OLTP系统非常有用,因为在这种系统中,读写的随机性非常大以至于一旦数据被读写之后,它们在今后较长的一段时间内不会得到再次使用。除了OLTP,raw设备还能够从以下几个方面改善DSS应用程序的性能:排序:对于DSS环境中大量存在的排序需求,raw设备所提供的直接写功能也非常有用,因为对临时表空间的写动作速度更快。序列化访问:raw设备非常适合于序列化I/O动作。同样地,DSS中常见的序列化I/O(表/索引的完全扫描)使得raw设备更加适用于这种应用程序。直接读写,不需要经过OS级的缓存。节约了内存资源,在一定程度上避免了内存的争用。避免了操作系统的cache预读功能,减少了I/O。采用裸设备避免了文件系统的开销。比如维护I-node,空闲块等。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号