Metadatenvorgänge wie ls -l, du oder find sind langsam
Wenn ein Verzeichnis mehr als 100.000 Dateien enthält, sind Metadatenvorgänge wie ls -l
, du
oder find
langsam.
Im Allgemeinen wird die Ausführung von ls -l
für ein File Storage-Verzeichnis mit 100.000 Dateien in <= 10 Sekunden abgeschlossen. Die Verzeichnisgröße beeinflusst den Schreibdurchsatz von File Storage nicht wesentlich. Wenn das Lesen/Schreiben langsam ist, stellen Sie sicher, dass Sie die NFS-Mountoptionen rsize
und wsize
nicht mit einem Wert kleiner als 1048576 verwenden. Als Best Practice geben Sie die Mountoptionen rsize
und wsize
nicht an, sondern den Standardwert 1048576.
Ursache: Directory-Scanvorgänge wie ls
, du
, find
und rsync
in einem Verzeichnis mit 100.000 Dateien dauern in File Storage länger.
Lösungen:
-
Teilen Sie die Dateien neu in Unterordner auf, anstatt große Dateimengen in nur einem Verzeichnis zu speichern. Es wird empfohlen, Unterverzeichnisse zu verwenden, um die Größe einzelner Verzeichnisse auf weniger als 100.000 Dateien zu beschränken.
Tipp
Als Best Practice für File Storage wird empfohlen, die Verzeichnisgrößen durch die Verwendung von Unterverzeichnissen klein zu halten. - Verwenden Sie
ls -ld
oderstat
anstelle vonls -l
. Diese Vorgänge sind bei großen Verzeichnissen wesentlich schneller alsls -l
.Beispiel:
[opc@instance01 dd]$ time ls -l|wc -l 401425 real 0m39.786s user 0m4.389s sys 0m5.403s [opc@instance01 dd]$ time ls -ld drwxrwxr-x. 4 opc opc 401424 Apr 17 14:18 . real 0m0.009s user 0m0.001s sys 0m0.003s [opc@instance01 dd]$ time stat .|grep Size Size: 401424 Blocks: 785 IO Block: 32768 directory real 0m0.010s user 0m0.002s sys 0m0.003s [opc@instance01 dd]$
-
Manchmal kann ein Problem mit dem NFS-Client dazu führen, dass Verzeichnisscanvorgänge in eine Schleife geraten und es dadurch zu einem Anstieg der Scanzeit kommt. Dieses Problem betrifft die folgenden Oracle Linux-Versionen:
- Oracle Linux 6
- Oracle Linux 7 mit Unbreakable Enterprise Kernel-(UEK-)Versionen vor 4.14.35-1902.301.1
Wenn Sie Oracle Linux 6 verwenden, führen Sie ein Upgrade auf Oracle Linux 7 oder höher durch. Die neueste Version wird empfohlen.
Oracle Linux 7-Benutzer können durch Ausführen des Befehls
uname -a
die UEK-Version überprüfen. Wenn es sich um eine UEK-Version vor 4.14.35-1902.301.1 handelt, führen Sie ein Upgrade auf eine spätere Kernelversion durch. Ein Patch zur Behebung dieses Verhaltens wurde am 17. April 2020 veröffentlicht und kann mit Oracle Ksplice installiert werden.Mit Oracle Ksplice können Sie wichtige Sicherheits- und andere kritische Kernelupdates ohne einen Neustart einspielen. Oracle Ksplice muss auf der Instanz installiert werden. Nach der Installation von Ksplice können Sie verfügbare Ksplice-Patches installieren. Weitere Informationen finden Sie unter Oracle Ksplice.
Nachdem Sie den Patch installiert haben, können Sie die gültige Kernelversion überprüfen. Ksplice
uptrack
ändert die Ausgabe desuname
-Befehls nicht.uname
reflektiert weiterhin die Version des Kernels, in dem die Instanz gebootet wurde.Verwenden Sie stattdessen
uptrack-uname
, um zu ermitteln, welcher gültige Kernel eine Instanz ausführt.uptrack-uname
hat dasselbe Format wieuname
und unterstützt die allgemeinenuname
-Flags, einschließlich-r
und-a
.Beispiel:
$ uptrack-uname -r 4.14.35-1902.302.2.el7uek.x86_64
-
Verzeichnisscanvorgänge rufen den NFS-Aufruf
READDIRPLUS
auf, der teuer ist, wenn das Verzeichnis viele Dateien enthält. Für Instanzen könnenREADDIRPLUS
-Aufrufe mit der Optionnordirplus
beim Mounten deaktiviert werden. So deaktivieren SieREADDIRPLUS
-NFS-Vorgänge für eine Instanz:- Öffnen Sie ein Terminalfenster auf der Instanz.
-
Unmounten Sie das Dateisystem mit dem Befehl
umount
. Beispiel:sudo umount 10.x.x.x:/fs-export-path /mnt/yourmountpoint
-
Mounten Sie das Dateisystem erneut, und fügen Sie die Option
-o nordirplus
hinzu, umREADDIRPLUS
zu deaktivieren. Beispiel:sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint