Oracle11g Direct NFS 测试

发表于:2013-10-17来源:IT博客大学习作者:osdba点击数: 标签:oracle
这几天测试了一下oracle11g Direct NFS 的功能,发现ORACLE Direct NFS是通过建立多个到NFS Server的TCP连接来提高IO的并发能力的。

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