這幾天測試了一下oracle11g Direct NFS 的功能,發現ORACLE Direct NFS是通過建立多個到NFS Server的TCP連接來提高IO的并發能力的。前面,我們提過,NFS的IO能力不高的原因是,NFS client端到NFS Server的操作是串行的,正常的NFS client到NFS Server端只建立一個連接,而且只有等前一個請求處理完成后,后一個請求才能處理,這樣在隨機讀IO上就上不去。而Oracle Directd NFS與NFS Server建立多個TCP連接,處理就可以并發進行了,這樣從理論上說就可以大大提高NFS的性能。
而在實際發現Direct NFS讀的時候很快,實測到達到了400Mbytes/s,基本沒有發現瓶頸,但寫的時候,發現比較慢,insert數據時,寫流量只有3.4Mbytes/s左右,寫為何這么慢原因不明,估計是Linux的NFS Server與Oracle Direct NFS配合不好導致。
當使用rman備份時,如果備份的路徑在Direct NFS指定的路徑中時,也會自動走到Direct NFS模式下。
測試過程:
先修改odm庫,啟動支持Direct nfs的odm庫:
[oracle@nfs_client lib]$ ls -l *odm*
-rw-r-r- 1 oracle oinstall 54764 Sep 11 2008 libnfsodm11.so
lrwxrwxrwx 1 oracle oinstall 12 Jul 8 18:55 libodm11.so -> libodmd11.so
-rw-r-r- 1 oracle oinstall 12755 Sep 11 2008 libodmd11.so
[oracle@nfs_client lib]$ rm libodm11.so
[oracle@nfs_client lib]$ ln -s libnfsodm11.so libodm11.so
在nfs server機器中共享一個目錄,為了使用硬盤不會成為IO瓶頸,使用8塊盤做一個raid0,然后做ext3文件系統,做為nfs Server的輸出:
mdadm -C /dev/md0 -level raid0 -c 8 -n 8 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi
mkfs -t ext3 /dev/md0
mount /dev/md0 /nfs
然后在/etc/exportfs中配置:
/nfs 192.168.172.132(rw,no_root_squash,insecure)
service nfs restart
在數據庫主機上(nfs client端):
[oracle@nfs_client dbs]$ cat oranfstab
server: node_data1
path: 192.168.172.128
export: /nfs mount: /opt/oracle/oradata/nfs
mount -t nfs 192.168.172.128:/nfs /opt/oracle/oradata/nfs
兩臺機器通過萬兆網卡連接,測試過網絡速度可以達到800Mbytes/s以上。
建一個數據庫:
CREATE DATABASE oratest
USER SYS IDENTIFIED BY sys
USER SYSTEM IDENTIFIED BY system
CONTROLFILE REUSE
LOGFILE GROUP 1 (’/opt/oracle/oradata/oratest/redo_1_1.log’) SIZE 200M REUSE,
GROUP 2 (’/opt/oracle/oradata/oratest/redo_2_1.log’) SIZE 200M REUSE,
GROUP 3 (’/opt/oracle/oradata/oratest/redo_3_1.log’) SIZE 200M REUSE,
GROUP 4 (’/opt/oracle/oradata/oratest/redo_4_1.log’) SIZE 200M REUSE,
GROUP 5 (’/opt/oracle/oradata/oratest/redo_5_1.log’) SIZE 200M REUSE
MAXLOGFILES 20
MAXLOGMEMBERS 5
MAXLOGHISTORY 1000
MAXDATAFILES 1000
MAXINSTANCES 2
noARCHIVELOG
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE ‘/opt/oracle/oradata/oratest/system01.dbf’ SIZE 2046M REUSE
SYSAUX DATAFILE ‘/opt/oracle/oradata/oratest/sysaux01.dbf’ SIZE 2046M REUSE
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE ‘/opt/oracle/oradata/oratest/temp01.dbf’ SIZE 2046M REUSE
UNDO TABLESPACE undotbs1
DATAFILE ‘/opt/oracle/oradata/oratest/undotbs01.dbf’ SIZE 2046M REUSE
SET TIME_ZONE = ‘+08:00′;
再建一個表空間tbs_testd在在nfs上:
create tablespace tbs_test datafile ‘/opt/oracle/oradata/nfs/test01.dbf’ size 2047M;
SQL> col svrname format a40
SQL> col dirname format a40
SQL> set linesize 200
SQL> select * from v$dnfs_servers;
ID SVRNAME DIRNAME MNTPORT NFSPORT WTMAX RTMAX
―――- ―――――――――――――- ―――――――――――――- ―――- ―――- ―――- ―――-
1 nfs_server /nfs 907 2049 32768 32768
1 row selected.
col filename format a40
select * from v$dnfs_files;
SQL> select * from v$dnfs_files;
FILENAME FILESIZE PNUM SVR_ID
―――――――――――――- ―――- ―――- ―――-
/opt/oracle/oradata/nfs/test01.dbf 2145394688 9 1
SQL> col path format a30
SQL> select * from V$DNFS_CHANNELS;
PNUM SVRNAME PATH CH_ID SVR_ID SENDS RECVS PINGS
―――- ―――――――――――――- ―――――――――― ―――- ―――- ―――- ―――- ―――-
5 nfs_server 192.168.172.128 0 1 9 25 0
9 nfs_server 192.168.172.128 0 1 28 75 0
11 nfs_server 192.168.172.128 0 1 96 250 0
12 nfs_server 192.168.172.128 0 1 166 552 0
13 nfs_server 192.168.172.128 0 1 216 955 0
原文轉自:http://blogread.cn/it/article/21