一、說說異步io(aio)
在hp-ux中,當采用同步io的方式時,這就意味著在下一次寫io進行之前,前一次io必須返回"成功寫完成"的信息,可以看到同步io方式在io負荷比較大的系統存在著性能的瓶頸。而采用異步io方式時,在寫請求發出之后操作系統會立即反回給應用一個寫成功的信息,余下的事就由操作系統完成了。在hp-ux中使用oracle、sybase這些數據庫時,為減少io的瓶頸、提高庫的性能,建議打開異步io,hp在這方面相對aix來說相對麻煩一些。
二、hp-ux方面打開aio需要做的設置
1、hp-ux使用aio的補丁要求
a、hp-ux 11.00的補丁要求為:
phkl_22126: s700_800 vm,async,hyperfabric
b、hp-ux 11i的補丁要求為:
phkl_25212 vm preemption point, mlock/async_io
phkl_25506 asyncio driver patch
使用swlist -l product檢查一下有無如上的補丁,如沒有聯系hp的supporter將其打上。
2、創建aio的字符設備
a、建立aio字符設備
#/sbin/mknod /dev/async c 101 0x0
b、調整設備的屬主,這個例中假定用戶為oracle,組為dba
#chown oracle:dba /dev/async
c、調整設備的權限位
#chmod 660 /dev/async
3、hp-ux要要調整的內核參數
調整內核參數據需要使用root用戶
a、把asyncdsk置為in
sam-> kernel configuration -> drivers->asyncdsk調整為in
b、調整max_async_ports參數
這個參數限定的是同時使用/dev/async設備的最大進程數,對于oracle這個參數應大于等于init<sid>.ora中的processes+后臺的進程數,對于sybase它所標識的是最大的工作進程數。當max_async_ports的值達到時,其余的進程將采用同步io的方式。
c、調整set aio_max_ops參數
這個參數所限定的是在任意一個時間點排隊的aio操作的最大的數目,一般保持默認值就可以,可以用glance監測一下。
d、調整fs_async參數
這個參數表明的是對文件系統的寫是否采用aio的方式,設定fs_async=0指定對于文件系統寫不用aio,設定fs_async=1則指定使用aio的方式,oracle不建議將這個什設置為1
4、其它方面設置
重中之重的一點是一定要為oracle用戶的組(一般為dba)設定mlock的權限,否則在數據庫啟動會報錯或在庫運行時會出現莫名其妙的數據庫hang的現象,我簡單說一下。
a、涉及到兩個命令getprivgrp用于檢查組有什么權限,setprivgrp用于設定組的權限,舉個例子大家就明白了
eg1:檢查dba組是否有mlock的權限
root#getprivgrp dba
eg2:設定dba組的mlock的權限
roolt#setprivgrp dba mlock
b、也可以把設定加入配置文件中,這樣在下次啟動時就自動生效了。
在/etc/privgroup中加入如下的一行:
dba mlock
如果privgroup不存在,可以編輯一個。
三、數據庫方面使用aio要要做的設置
1、oracle方面
a. 7.3.0以前的版本 :不需要配置init<sid>.ora中的參數
b. 7.3.x :在init<sid>.ora中設定use_async_io = true
c. 8.x 及以后的版本 :在init<sid>.ora中設定disk_asynch_io = true
2、sybase方面
默認就是打開aio的。
四、其它
1、檢查一下aio是否生效了
#fuser /dev/async
有進程列出來說明aio已經生效了。
2、我的hp11.00+oracle8.1.6.0.0的環境啟用aio時而不時的會出現壞塊的問題(ora-01578),請大家注意,但在hp11i的系統與oracle8i,9i配 合中沒出現過這個問題。