Lenteur des opérations de métadonnées comme ls -l, du ou find

Lorsqu'un répertoire dépasse 100 000 fichiers, les opérations de métadonnées telles que ls -l, du ou find sont lentes.

En général, une opération ls -l effectuée sur un répertoire File Storage comportant 100 000 fichiers se termine en 10 secondes au maximum. La taille du répertoire n'affecte pas de manière significative le débit d'écriture dans File Storage. Si vous constatez une lenteur de lecture/écriture, assurez-vous de ne pas utiliser les options de montage NFS rsize et wsize avec une valeur inférieure à 1048576. Il est recommandé de ne pas spécifier les options de montage rsize et wsize, mais de les laisser avec la valeur par défaut 1048576.

Cause : les opérations d'analyse de répertoire telles que ls, du, find et rsync sur un répertoire contenant 100 000 fichiers prennent plus de temps dans File Storage.

Solutions :

  1. Redistribuez les fichiers dans des sous-répertoires au lieu de stocker un grand volume de fichiers dans un seul répertoire. Nous recommandons d'utiliser des sous-répertoires pour conserver des tailles de répertoire inférieures à 100 000 fichiers.

    Conseil

    Il est recommandé d'utiliser des sous-répertoires afin de limiter la taille des répertoires dans File Storage.
  2. Utilisez ls -ld ou stat au lieu de ls -l. Ces opérations sont beaucoup plus rapides que ls -l pour les répertoires volumineux.

    Par exemple :

    [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]$
  3. Parfois, un problème de client NFS peut provoquer une boucle dans les opérations d'analyse de répertoire et entraîner une augmentation du temps d'analyse. Ce problème affecte les versions d'Oracle Linux suivantes :

    • Oracle Linux 6
    • Oracle Linux 7 avec des versions d'UEK (Unbreakable Enterprise Kernel) antérieures à 4.14.35-1902.301.1

    Si vous utilisez Oracle Linux 6, mettez à niveau vers Oracle Linux 7 ou version ultérieure. La dernière version est recommandée.

    Les utilisateurs d'Oracle Linux 7 peuvent exécuter la commande uname -a pour vérifier la version d'UEK. Si la version d'UEK est antérieure à 4.14.35-1902.301.1, effectuez une mise à niveau vers une version ultérieure du noyau. Le patch traitant ce comportement a été mis à disposition le 17 avril 2020 et peut être installé avec Oracle Ksplice.

    Oracle Ksplice vous permet d'appliquer d'importantes mises à jour de sécurité ainsi que d'autres mises à jour de noyau critiques sans redémarrage. Oracle Ksplice doit être installé sur l'instance. Après l'installation de Ksplice, vous pouvez installer les patches Ksplice disponibles. Pour obtenir des instructions, reportez-vous à Oracle Ksplice.

    Une fois le patch installé, vous pouvez vérifier la version du noyau en cours. La commande uptrack Ksplice ne modifie pas la sortie de la commande uname. uname continue de refléter la version du noyau dans laquelle l'instance a été initialisée.

    A la place, utilisez uptrack-uname pour voir le noyau en cours exécuté par une instance. uptrack-uname a le même format que uname et prend en charge les indicateurs uname courants, y compris -r et -a.

    Par exemple : 

    $ uptrack-uname -r
    4.14.35-1902.302.2.el7uek.x86_64
  4. Les opérations d'analyse de répertoire appellent l'opération NFS READDIRPLUS, qui est coûteuse en ressources lorsque le répertoire contient de nombreux fichiers. Lors du montage, les appels READDIRPLUS peuvent être désactivés sur les instances à l'aide de l'option nordirplus. Pour désactiver les opérations NFS READDIRPLUS sur l'instance, procédez comme suit :

    1. Ouvrez une fenêtre de terminal sur l'instance.
    2. Démontez le système de fichiers à l'aide de la commande umount. Par exemple :

      sudo umount 10.x.x.x:/fs-export-path /mnt/yourmountpoint
    3. Remontez le système de fichiers et incluez l'option -o nordirplus pour désactiver READDIRPLUS. Par exemple :

      sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint