这几天测试了一下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