Direct NFS Client の検証 その1(設定編)
大容量のNASを使っている案件が多くなってきたなーと感じる今日この頃。
SASストレージに比べて安価なNASをOracleで上手く活用できないかなー??
と考えていたところ「Direct NFS Client」という機能があると知りました。
恥ずかしながら、つい最近知りました・・・
11gR1からの新機能なので、もう大分以前からの機能なんですね。
とは言え、それほど普及している機能ではないと思います。
この機能を一言で説明すると
「NFSサーバー上のOracleファイルとのI/Oを最適化する」
というようなものらしいです。
Oracleファイルって何を指すんだろうか?
データファイルはもちろんのことですが、
・アーカイブログファイルは?
・RMANバックアップファイルは?
・DataPumpのダンプファイルは?
・外部表、SQL*Loarderの元ファイル(CSVフラットファイル等)は?
etc…
データファイルをNASに置くというのは敷居が高いような気がしますが、アーカイブやバックアップの出力先としては十分に活用できるケースはありそうです。
個人的には、他システムで生成され外部NASに配置されたCSVファイルを外部表ロードするという処理を行っている案件があるので、この処理が高速化されるのであれば使ってみたいところです。
前置きはこの辺にして「Direct NFS Client」を試してみたいと思います。
■前提環境
前提として、NFSマウントの設定がされているものとします。
今回は、以下の構成でNFSの設定を行いました。
serv1 NFS Client Redhat EL5 Oracle 11.2.0.2 NFSマウントポイント(serv2:/oradata/ora112) serv2 NFS Server Redhat EL5
■設定手順
設定はいたって簡単です。
$ORACLE_HOME/lib/libodm11.so のシンボリックリンクのリンクの向き先を libnfsodm11.so に変更してインスタンスを再起動するだけです。
※オプションの設定ファイル「$ORACLE_HOME/dbs/oranfstab」というファイルを使うことも出来ますが、このファイルの設定は任意です。
今回は使っていません。下記のシンボリックリンク変更だけです。
$ cd $ORACLE_HOME/lib $ ls -l libodm11.so lrwxrwxrwx 1 oracle oinstall 12 9月 21 2010 libodm11.so -> libodmd11.so $ $ $ mv libodm11.so libodm11.so.bk $ ln -s libnfsodm11.so libodm11.so $ ls -l libodm11.so lrwxrwxrwx 1 oracle oinstall 14 3月 31 14:12 libodm11.so -> libnfsodm11.so $ $ $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Thu Mar 31 14:16:34 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Release 11.2.0.2.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options SQL> startup
■設定確認
インスタンス起動時のアラートログに以下のような出力が確認できました。
ALTER DATABASE OPEN Thu Mar 31 15:43:59 2011 Direct NFS: attempting to mount /oradata/ora112 on filer 192.168.X.XXX defined in mtab Direct NFS: channel config is:channel id [0] local [] path [192.168.X.XXX] Direct NFS: mount complete dir /oradata/ora112 on 192.168.X.XXX mntport 785 nfsport 2049 Direct NFS: channel id [0] path [192.168.X.XXX] to filer [192.168.X.XXX] via local [] is UP Direct NFS: channel id [1] path [192.168.X.XXX] to filer [192.168.X.XXX] via local [] is UP
「Direct NFS Client」の領域 /oradata/ora112 配下にデータファイルを作成します。
※今回、その他のデータベースファイルはASM上に配置しています。
SQL> create tablespace TS_DNFS datafile '/oradata/ora112/ts_dnfs.dbf' size 100M;
「Direct NFS Client」関連の V$ 表の結果結果は以下の通りです。
SQL> select * from v$dnfs_servers; ID ---------- SVRNAME ------------------------------------------- DIRNAME ------------------------------------------- MNTPORT NFSPORT WTMAX RTMAX ---------- ---------- ---------- ---------- serv2 /oradata/ora112 785 2049 32768 32768 1行が選択されました。 SQL> select * from v$dnfs_files; FILENAME ------------------------------------------- FILESIZE PNUM SVR_ID ---------- ---------- ---------- /oradata/ora112/ts_dnfs.dbf 104865792 16 1 1行が選択されました。
v$dnfs_stats には、「Direct NFS Client」を使った統計がプロセス単位で出力されるらしいです。
また、このビューにはプロセス番号(PNUM 列)しかなかったので v$process と結合すると良さそうです。
SQL> select program,nfs_read,nfs_write from v$process p,v$dnfs_stats d where p.pid=d.pnum; PROGRAM NFS_READ NFS_WRITE ------------------------------- ---------- ---------- oracle@srv1 (PMON) 0 0 oracle@srv1 (PSP0) 0 0 oracle@srv1 (VKTM) 0 0 oracle@srv1 (GEN0) 0 0 oracle@srv1 (DIAG) 0 0 oracle@srv1 (DBRM) 0 0 oracle@srv1 (PING) 0 0 oracle@srv1 (ACMS) 0 0 oracle@srv1 (DIA0) 0 0 oracle@srv1 (LMON) 0 0 oracle@srv1 (ARC0) 0 0 oracle@srv1 (ARC2) 0 0 oracle@srv1 (LMD0) 0 0 oracle@srv1 (RMS0) 0 0 oracle@srv1 (LMHB) 0 0 oracle@srv1 (MMAN) 0 0 oracle@srv1 (DBW0) 2 0 oracle@srv1 (LGWR) 1 1 oracle@srv1 (CKPT) 0 0 oracle@srv1 (SMON) 0 0 oracle@srv1 (RECO) 0 0 oracle@srv1 (RBAL) 0 0 oracle@srv1 (ASMB) 0 0 oracle@srv1 (MMON) 0 0 oracle@srv1 (MMNL) 0 0 oracle@srv1 (MARK) 0 0 oracle@srv1 (SMCO) 0 0 oracle@srv1 (TNS V1-V3) 0 0 oracle@srv1 (W000) 0 0 oracle@srv1 (W001) 0 0 oracle@srv1 (QMNC) 0 0 oracle@srv1 (Q000) 0 0 oracle@srv1 (Q001) 0 0 34行が選択されました。
今回はここまで。
動作検証は次回の記事で!