aix系统下的内存管理与异步IO(老白-一个金牌DBA的故事)

一般来说,AIX 操作系统针对ORACLE数据库的优化并不复杂,主要集中在异步I/O,虚拟内存管理等方面。对于异步I/O,首先要明白一点,
针对裸设备和针对文件系统的优化是不同的。
AIX 5L对于裸设备使用异步I/O是内核支持的,因此不需要使用AIO Server;而文件系统使用异步I/O时,则需要使用AIO Server。通过
以下命令可以检查异步I/O的设置:
LN-BILL-DB-JF|| /#lsattr -El aio
autoconfig available  STATE to be configured at system restart   True
fastpath   enable     State of fast path                         True
kprocprio  39         Server PRIORITY                            True
maxreqs    4096     Maximum number of REQUESTS                 True
maxservers 40         MAXIMUM number of servers per cpu          True
minservers 10         MINIMUM number of servers                  True


maxreqs是最大AIO请求数量,其默认值是4096,对于较大的系统来说,4096可能不够。对于Oracle和AIX的bug,当maxreqs不足时
会出现类似下面的错误。

Sun Dec 16 21:27:34  2007
Errors in file /data1/oracle9/app/admin/sdh/bdump/sdh_dbw3_462948.trc:
ORA-27061:skgfospo:waiting for async I/Os failed
IBM AIX RISC System/6000 Error: 22: Invalid argument
Sun Dec 16 21:27:34 2007
DBW3:terminating instance due to error 27061
Instance terminated by DBW3,pid = 462948

严重时会导致宕机。这个bug在oracle 9.2和Oracle 10.2中都有,因此建议在安装数据库时将maxreqs 参数调整为8192或更高。

参数maxservers和minservers仅适用于使用文件系统的环境。maxservers 是每个CPU最大的AIO Server 的数量,而不是系统中
AIO Server的总数。对于I/O比较高的系统,需要设置较大的maxservers 参数。通过pstat命令,可以查看当前AIO Server的数量,
如果已经接近或者达到了最大的AIO Server的数量,那么就需要加大 maxservers参数了。


LN-BILL-DB-JF||/#pstat -a |grep aios
66  a    428a      1     428a  0     0    1   aioserver
67  a    438c      1     438c  0     0    1   aioserver
68  a    458c      1     458c  0     0    1   aioserver
69  a    468c      1     468c  0     0    1   aioserver
70  a    478e      1     478e  0     0    1   aioserver
71  a    4890      1     4890  0     0    1   aioserver
72  a    4992      1     4992  0     0    1   aioserver
73  a    428a      1     428a  0     0    1   aioserver
74  a    4a94      1     4a94  0     0    1   aioserver
75  a    4b96      1     4b96  0     0    1   aioserver
76  a    4c98      1     4c98  0     0    1   aioserver

对于虚拟内存管理来说,作为Oracle服务器使用的系统,是不需要多少文件缓冲的。文件缓冲不会提高Oracle数据库的性能,因为Oracle
数据库本身有自己的DB Cache。AIX 操作系统参数maxperm%可以限制文件缓存占用物理内存的百分比。不过AIX操作系统默认的maxperm%值
是80%,这是一个很高的值,并不适合于Oracle数据库服务器。因此在调整AIX操作系统时,建议将maxperm%调整为10%或者更小。

IBM工程师可能会说文件缓冲室可以释放的。一旦操作系统需要,就可以将文件缓冲的内存释放出来使用,且确实在IBM的相关技术资料中,
都建议在AIX 5.3以后的版本中安装Oracle数据库时,设置maxperm%为90%-95%,同时设置lru_file_repage为0。从原理上来看,这种设置
不无道理,不过由于Unix的算法问题,这些被文件缓冲占用的内存的释放需要一个过程,释放这些内存往往伴随着I/O和换页。当物理内存十分
小时,由于没有达到最低阈值,所以文件缓冲中的内存不会释放。而这个时候如果有一个比较消耗内存的操作发生,那么文件缓冲的内存
需要释放,这样就会缠上大量的I/O和换页操作,在某个瞬间可能导致系统资源被过度消耗,引起短暂的性能瓶颈,严重时还可能产生一些
预想不到的后果。
我曾经碰到过一个客户,由于做了一个FTP操作,想把一个40GB的备份集复制到另外一台服务器上,FTP刚刚开始不到半分钟,这个节点上的RAC
实例就宕了。后来经检查发现,这个节点被RAC驱逐了。这是由于文件缓冲释放时产生了大量系统调用,CPU和I/O资源都出现了不足,最终造成
RAC之间的通信超时,被另外一个节点认为这个节点出现了故障,主动驱逐了这个节点。


对于pbuf的调整,主要取决于操作系统中裸设备访问是否引起了大量的pbuf等待。在别的操作系统下,一般来说查看I/O是否存在等待,
可以看vmstat命令的b字段的值;对于AIX操作系统,如果使用文件系统,可以看b的值;而对于使用裸设备的系统,b可能永远为0。比如下面的
系统就是使用裸设备的:

LN-BILL-DB-JF||/#vmstat 1 10
System Configuration:lcpu=6  mem=12288MB
kthr         memory           page                    faults                cpu
----        --------       ----------------------  ----------------     --------------
r  b      avm     fre       re pi  po fr sr  cy     in     sy    cs      us sy  id   wa
2  1    1963449  565281     0  0   1  20 67  0     150  28237 20593      18  7  67    8
1  0    1964106  564582     0  0   0   0  0  0   14039  47759 37195      16 24  53    7
1  0    1963522  565166     0  0   0   0  0  0   13860  41577 33567      13 15  64    8
2  0    1963803  564884     0  0   0   0  0  0   13195  39947 31457      12 14  67    7
7  0    1964053  564634     0  0   0   0  0  0   14537  55937 36789      26 29  35   10
5  0    1964071  564625     0  0   0   0  0  0   15405  48860 41174      22 25  46    7
0  0    1963846  564839     0  0   0   0  0  0   12381  46809 30043      15 20  57    7
2  0    1964185  564500     0  0   0   0  0  0   15801  41351 42505      20 20  50   10

如果使用vmstat -I 命令,就可以看到另外的现象,具体如下:
root:/>vmstat -I 2 10
kthr         memory                      page                    faults                cpu
-------     ----------------       ----------------------  ----------------     -----------------
r  b  p         avm      fre        fi fo  pi po fr  sr      in     sy    cs     us  sy   id    wa
4  1  15    1529390   648297        31 63   0  0 63 336     199  26183  8006     42   9   36    13
3  0  45    1531733   645953         0  0   0  0  0   0    4672  30147 10393     38  14    0    48
7  0  38    1533274   644410         0  1   0  0  0   0    5430  39781 11837     52  16    0    33
2  0  37    1431244   646439         0  0   0  0  0   0    4726  32458 10638     40  15    0    45
5  0  38    1533318   644364         0  0   0  0  0   0    4096  22612  9455     37  11    0    52
2  0  41    1540408   647373         0 64   0  1  0   0    4122  24930  9439     36  15    0    49
3  0  40    1534883   642797         0  0   0  0  0   0    4197  29303  9481     46  13    0    41
5  0  41    1536024   641654         0  0   0  0  0   0    4138  28142  9851     32  14    0    54
可以看到,p的值相当高,这是由于裸设备的I/O访问存在较为严重的性能问题。这个时候使用vmstat -v ,可以看到一些
与I/O相关的信息,具体如下:
root:/>vmstat -v
   

                  2097152     memory pages
                   1985190    lruable pages
                    222013     free   pages
                         2     memory pools
                    136502     pinned pages
                      80.1     maxpin percentage
                       5.0    minperm percentage
                       12.0   maxperm percentage
                       11.9   numperm percentage
                     237978    file   pages
                       0.0 compressed percentage
                         0 compressed pages
                       0.0 numclient  percentage
                     12.0  maxclient  percentage
                        0  client     pages
                        0  remote pageouts scheduled
                   1393707 pending disk I/Os blocked with no pbuf
                    288770 paging  space I/Os blocked with no psbuf
                     93511 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

从上面的代码可以看到,由于缺乏pbuf而导致等待。在一天的业务高峰期开始和结束时各执行一次这个
命令,就可以看出在业务高峰期由于pbuf不足而导致的等待时间有多少。如果这个等待增长十分快,
那么就说明pbuf需要进行优化。要注意的是,pbuf的调整需要十分小心。
调整不当反而会降低系统性能,并且pbuf在AIX的不同版本的策略是不同的,调整方法也不同,调整之前
一定要认真阅读IBM的相关手册。

 

    一般DBA喜欢使用vmstat命令来查看系统的状态。如果问起vmstat中b的含义,可能大家都很清楚。b表示资源等待队列的长度。
从某种程度来说,b等待可以和I/O等待挂钩,如果数据库使用文件系统作为数据文件的存储方式的话。但是对与裸设备来说,
裸设备出现等待并不会明显的体现在b队列上。
    在AIX下提供一个-I选项。使用该选项,可以看到一个p值,p值代表物理I/O线程等待队列的长度。如果p队列的长度较大,那说明
存储系统的性能存在问题。
    vmstat -I 1  10
system configuration:lcpu=48 mem=96257MB ent=24.00

kthr         memory                      page                    faults                cpu
-------     ----------------       ----------------------  ----------------     -----------------
r  b  p         avm      fre        fi fo  pi po fr  sr      in     sy    cs     us  sy   id    wa
4  1  15    1529390   648297        31 63   0  0 63 336     199  26183  8006     42   9   36    13
3  0  45    1531733   645953         0  0   0  0  0   0    4672  30147 10393     38  14    0    48
7  0  38    1533274   644410         0  1   0  0  0   0    5430  39781 11837     52  16    0    33
2  0  37    1431244   646439         0  0   0  0  0   0    4726  32458 10638     40  15    0    45
5  0  38    1533318   644364         0  0   0  0  0   0    4096  22612  9455     37  11    0    52
2  0  41    1540408   647373         0 64   0  1  0   0    4122  24930  9439     36  15    0    49
3  0  40    1534883   642797         0  0   0  0  0   0    4197  29303  9481     46  13    0    41
5  0  41    1536024   641654         0  0   0  0  0   0    4138  28142  9851     32  14    0    54


在这种情况下,可以分析一下pbuf是否存在不足的现象。具体方法是使用vmstat -v,查看是否存在较多的pbuf阻塞等待。

root:/>vmstat -v
   

                  2097152     memory pages
                   1985190    lruable pages
                    222013     free   pages
                         2     memory pools
                    136502     pinned pages
                      80.1     maxpin percentage
                       5.0    minperm percentage
                       12.0   maxperm percentage
                       11.9   numperm percentage
                     237978    file   pages
                       0.0 compressed percentage
                         0 compressed pages
                       0.0 numclient  percentage
                     12.0  maxclient  percentage
                        0  client     pages
                        0  remote pageouts scheduled
                   1393707 pending disk I/Os blocked with no pbuf
                    288770 paging  space I/Os blocked with no psbuf
                     93511 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
实际上,小小的vmstat中还包含了十分多的门道,用好它可以为我们提供非常多的有效信息。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值