一般说来异步I/O是和同步I/O相比较来说的如果是同步I/O当一个I/O操作执行时应用程序必须等待直到此I/O执行完 相反异步I/O操作在后台运行I/O操作和应用程序可以同时运行提高了系统性能; 使用异步I/O会提高I/O流量如果应用是对裸设备进行操作这种优势更加明显 因此象数据库文件服务器等应用往往会利用异步I/O使得多个I/O操作同时执行
文件集的安装
要在aix平台上使用异步I/O特征系统必须安装有文件集bosrteaio可以通过如下命令检查之:
lslpp l bosrteaio
然后再通过smitty(smit)使得异步I/O可用
#smit chgaio
STATE to be configured at system restart available
如何确定是否需要使用异步I/O
a 使用VMSTAT命令查看列wa如何其值超过%则使用;
b 使用命令iostat * * 如果%tm_act超过%则使用;
值得注意的是在SMP系统中vmstat的值usidwa列是所有处理器之间的平均值但是每个处理器的i/o等待值却不是平均值而是一个全局的统
计数值
当前aio服务器的数目
pstat a | grep aios | wc l
如何设置aio 服务器
一般有三个规则可以用来决定因素aio的数目
a 限定MAXIMUM等于十倍的当前使用的物理磁盘数MINIMUM等于一半的MAXIMUM数;
b 设置MAXIMUM为MINIMUM为默认值监控系统正常的负荷情况过一段时间后再进行调整如下:
MAXIMUM=当前运行的aio数+
MINIMUM=当前运行的aio数
c 在最高I/O活动开始之前使用vmstat s看结果中的iodones隔一时间段再执行查看二次iodones之差值便可以知道在这个时间段内有多少个物理I/O发生了如果便可以考虑增加MAXIMUM数再进行观察调整
异步I/O的几个参数
可以使用chdev或是smit来修改有关AIO的参数主要考虑如下几个
MINIMUM number of servers :指定分配给异步I/O进程的最少内核进程数
MAXIMUM number of servers :指定分配给异步I/O进程的最大内核进程数
Maximum number of REQUESTS :指定能同一时间分配的最大数目的异步I/O请求数它包括进程中的请求也包括等待中的请求数最大数不能小于MAXIMUM number of servers它定义在/usr/include/sys/limitsh中
Server PRIORITY:指定分析给异步I/O进程的优先级建议用默认值
STATE to be configured at system
restart:指定系统初始化时异步I/O进程的状态可能值是)defined(处于定义状态且不可用))available(可用)STATE of FastPath:如果选择disable则表明强迫所有的I/O活动都通过异步内核进程默认是enable
此平台上的数据库如oracle中使用异步i/o则需要设置参数disk_asynch_io = TRUE就可以了
Hpux使用Aio的补丁要求
bHPUX i的补丁要求为
PHKL_ vm preemption point mlock/async_io
PHKL_ asyncio driver patch
使用swlist l product检查
创建aio的字符设备
a建立aio字符设备
#/sbin/mknod /dev/async c x
b调整设备的属主这个例中假定用户为oracle组为dba
#chown oracle:dba /dev/async
c调整设备的权限位
#chmod /dev/async
Hpux要要调整的内核参数
调整内核参数据需要使用root用户
a把asyncdsk置为in
sam> Kernel Configuration > Drivers>asyncdsk调整为in
b调整max_async_ports参数
这个参数限定的是同时使用/dev/async设备的最大进程数对于Oracle这个参数应大于等于init< sid>ora中的processes+后台的进程数当max_
async_ports的值达到时其余的进程将采用同步IO的方式
c调整set aio_max_ops参数
这个参数所限定的是在任意一个时间点排队的Aio操作的最大的数目一般保持默认值就可以可以用glance监测一下
d调整fs_async参数
这个参数表明的是对文件系统的写是否采用Aio的方式设定fs_async=指定对于文件系统写不用Aio设定fs_async=则指定使用aio的方式Ora
cle不建议将这个什设置为
其它方面设置
值得注意的是要为oracle用户的组(一般为dba)设定MLOCK的权限否则在数据库启动会报错或在库运行时会出现莫名其妙的数据库hang的现象
具体说明如下
a有二个命令getprivgrp(检查)setprivgrp(设置)
eg:检查dba组是否有MLOCK的权限
root#getprivgrp dba
eg:设定dba组的MLOCK的权限
roolt#setprivgrp dba MLOCK
b也可以把设定加入配置文件中这样在下次启动时就自动生效了
在/etc/privgroup中加入如下的一行
dba MLOCK
如果privgroup不存在可以编辑一个
i 及以后的版本 :在init< sid>ora中设定disk_asynch_io = TRUE
检查一下aio是否生效了
#fuser /dev/async
有进程列出来说明aio已经生效了
在hp上使用异步I/O时可能还有些问题会出现一些ora的错误但是hpi后应没有问题了