IPV6 und NFSv4 Direct NFS: NFSERR 10001 error encountered
Auch wenn IPV6 schon seit langem verfügbar ist, sind viele Implementierungen im NFS Storage Umfeld immer noch primäre auf IPV4. Oracle selbst unterstützt IPV6 offiziell ab Oracle 12cR2 vollständig, davor beginnend mit Oracle 11gR2 schon großteils. Ähnlich sieht es mit NFSv4 und NFSv4.1 aus. Beide Versionen werden beginnend mit Oracle 12cR1 unterstützt, allerdings mit einer wichtigen Einschränkung. Bei Oracle dNFS muss man jedoch genauer auf die Oracle Datenbank Version achten. Offiziell ist zwar ab Oracle 18c auch NFSv4.1 und pNFS unterstützt, allerdings muss man das explizit in der oranfstab spezifizieren und wir haben damit auch mit Oracle 19c noch Probleme gesehen.
Ausgangssituation
Im Oracle Linux 8 Betriebssystem ist der mount für xx:xx:xx:x:x:1:0:2:/dNFS_POC auf /db/dbf mit NFSv4.1 erfolgt und die Datenbank ist OHNE dNFS problemlos und ohne Fehlermeldungen im Alert.log gestartet. Auf der Storage sind NFSv3, NFSv4 und NFSv4.1 konfiguriert und erlaubt. Nach dem Einschalten von dNFS hat der Startup der Instanz deutlich länger benötigt - war aber erfolgreich - und im Alert.log der Datenbank waren viele Fehlermeldungen - hier ein Beispiel - zu finden:
Direct NFS: NFSERR 10001 error encountered. Server xx:xx:xx:x:x:1:0:2 path xx:xx:xx:x:x:1:0:2
Direct NFS: NFSERR 10001 error encountered. Server xx:xx:xx:x:x:1:0:2 path xx:xx:xx:x:x:1:0:2
Direct NFS: dismount complete dir /dNFS_POC on filer xx:xx:xx:x:x:1:0:2
Direct NFS: channel id [0] path [xx:xx:xx:x:x:1:0:2] to filer [xx:xx:xx:x:x:1:0:2] via local [] is UP
Direct NFS: attempting to mount /dNFS_POC on filer xx:xx:xx:x:x:1:0:2 defined in mtab
Direct NFS: channel config is:
channel id [0] local [] path [xx:xx:xx:x:x:1:0:2]
Direct NFS: mount complete dir /dNFS_POC on xx:xx:xx:x:x:1:0:2 mntport 635 nfsport 2049 using NFS version 3
Wenn man in V$DNFS_SERVERS, war dort zwar ein Eintrag mit NFSVERSION=nfsv3 zu finden, aber WTMAX und RTMAX haben 0 (statt normalerweise 65536) angezeigt. In V$DNFS_FILES war kein einziger Eintrag vorhanden. Die Datenbank Instance hat also einen Fallback auf den Betriebssystem NFS Mount durchgeführt.
Problemlösung
Ein Remount des Betriebssystem NFS Clients auf NFSv4.0 hat keine Änderung gebracht, also haben wir ein /etc/oranfstab File mit folgendem Inhalt erzeugt:
server: mynfsfiler
local: xx:xx:xx:x:x:2:0:4 path: xx:xx:xx:x:x:1:0:2
nfs_version: nfsv4
export: /dNFS_POC mount: /db/dbf
Damit konnte die Datenbank Instanz erfolgreich mit dNFS über NFSv4.0 und IPV6 gestartet werden. In V$DNFS_SERVERS und V$DNFS_FILES waren die zu erwartenden Einträge. Aus diesem Grund ist die Nutzung einer oranfstab im Zusammenhang mit NFSv4.x dringend zu empfehlen.
I/O Calibrate Performance Unterschied - Betriebsystem NFS versus Oracle dNFS
Der Test ist in einer VM mit 4 vCores mit hoher Taktrate von 3.9GHz erfolgt - somit gab es noch einen Virtualisierungsoverhead. Die 10GBit Netzwerkkarte ist ohne Bonding mit MTU=9000 konfiguriert.
Die verwendete Datenbank war ca. 1TB groß - somit wurde die effektive Storage Performance (SSDs) gemessen und nicht nur das Storage Memory.
Betriebssystem NFS Ergebnisse
Die CPU Auslastung während der IOPS Phase des I/O Calibrate lag bei fast 100% (4 Cores).
IOPS 50.000
Latency 1.3ms
MBSP 1554
Oracle dNFS Ergebnisse
Für die IOPS waren die 4 vCPU Cores mit ca. 50% ausgelastet (25% user, 25% system) - ohne Virtualisierung wäre diese noch niedriger ausgefallen.
IOPS=146248
LATENCY=0.2ms
MBPS=2124
Analyse des Ergebnisses
Den höheren Aufwand, den Oracle durch das Betriebssystem NFS hat - die Oracle Blöcke müssen im Memory mehrfach kopiert werden - schlägt sich direkt auf die CPU Last nieder, die dann den möglichen Durchsatz - vor allem bei den IOPS - deutlich reduziert hat. Gleichzeitig sind die Latenzen mit 1.3ms um mehr wie den Faktor 6 höher als bei dNFS mit unter 0.2ms. Bei der Durchsatzmessung (MBPS) ist der Unterschied bei weitem geringer, weil hier nicht mehr die CPU der limitierende Faktor war, sondern einfach die höhere Latenz die Performance limitiert hat.
Um eine vergleichbare IO Performance mit dem Betriebsystem NFS zu erreichen, müßte man die VM statt mit 4 mit zumindest 12 vCPU Cores konfigurieren - was speziell die Oracle Lizenzkosten dramatisch erhöhen würde.