Tous les produits
Search
Centre de documentation

ApsaraDB for MongoDB:Récupération des fragments de disque pour libérer de l'espace

Dernière mise à jour :Aug 08, 2026

Après la suppression de données via la commande delete ou grâce aux index TTL, l'espace physique sur le disque n'est pas automatiquement libéré. L'espace libre inutilisé devient alors des fragments de disque. Cette rubrique décrit trois méthodes de récupération : les plans de récupération automatique, la récupération manuelle depuis la console et la commande compact.

Choisir une méthode de récupération

Dans ApsaraDB for MongoDB, après la suppression de données via la commande delete ou grâce aux index TTL, l'espace physique sur le disque n'est pas automatiquement libéré. L'espace occupé par les données supprimées est marqué comme libre et réservé pour les écritures futures. La partie qui reste inutilisée devient des fragments de disque. Lorsque l'accumulation de fragments entraîne une utilisation élevée du disque, vous devez récupérer ces fragments pour libérer de l'espace physique.

Quelle situation rencontrez-vous ?

Utilisez le tableau suivant pour identifier rapidement votre situation et accéder à la section correspondante :

Symptôme

Cause / Où chercher

Après la suppression de données (delete/TTL), l'espace disque ne diminue pas, voire augmente.

Il s'agit d'un comportement attendu (marquage et suppression, voir Pourquoi des fragments de disque apparaissent-ils ?). Vous devez récupérer manuellement les fragments. Consultez la comparaison des méthodes ci-dessous.

La récupération ou la commande compact a été exécutée mais sans effet visible (taux de fragmentation inchangé, retour ok mais espace inchangé).

Il s'agit probablement d'une « incompatibilité de nœud » ou d'un seuil non atteint. Voir Récupération exécutée mais sans effet visible.

Le disque est plein, l'instance est verrouillée et les opérations d'écriture et de suppression échouent.

Consultez Puis-je exécuter compact lorsque l'instance est verrouillée en raison d'un disque plein ? (vous pouvez utiliser drop pour une récupération rapide).

L'utilisation affichée dans la console et les alertes ne correspondent pas (par exemple, la console affiche 60 % mais l'alerte se déclenche à 90 %).

Les alertes se déclenchent sur le nœud unique le plus élevé ; la console affiche par défaut un autre nœud. Voir L'utilisation dans la console ne correspond pas aux alertes.

Une grande quantité de données a été nettoyée et vous souhaitez réduire la taille du disque pour diminuer les coûts.

La réduction de taille n'est pas prise en charge. Voir Puis-je réduire la taille du disque pour économiser de l'argent ?.

Vous souhaitez accéder directement aux procédures de récupération.

Consultez la comparaison des méthodes ci-dessous.

Les trois méthodes de récupération sont comparées comme suit :

Dimension

Méthode 1 : Plan de récupération automatique

Méthode 2 : Récupération manuelle depuis la console

Méthode 3 : Commande compact en ligne de commande

Nœud cible

Nœuds cachés uniquement

Nœuds cachés uniquement

Nœuds Primary ou

Secondary

Exigences relatives à la version du kernel

  • 8.0, 7,0, 6,0, 5,0 : toutes les versions mineures

  • 4.4 (5.0.7 ou ultérieure)

  • 4.2 (4.0.23 ou ultérieure)

  • 8.0, 7,0, 6,0, 5,0 : toutes les versions mineures

  • 4.4 (5.0.7 ou ultérieure)

  • 4.2 (4.0.23 ou ultérieure)

Aucune

Limite d'espace récupérable par cycle

100 Go

Aucune

Aucune

Impact sur le service

Aucun (exécuté pendant les fenêtres de maintenance)

Aucun (cible les nœuds Hidden)

Oui. Pour plus de détails, consultez Impact de compact sur les charges de travail.

Cas d'utilisation

Convient pour un grand nombre de collections avec de faibles volumes d'espace récupérable.

Convient aux collections disposant de volumes importants d'espace récupérable.

Volumes importants, contrôle précis ou lorsque la récupération via la console est insuffisante

Remarque

L'exécution de drop sur une collection ou une base de données entière libère immédiatement son espace physique. Toutefois, il s'agit d'une opération de suppression de données qui ne doit être utilisée qu'en cas d'urgence, lorsque l'espace disque est limité ou que l'instance est verrouillée. Ce n'est pas une méthode de routine pour la récupération des fragments.

Méthode 1 : Configurer un plan de récupération automatique

ApsaraDB for MongoDB propose un plan de récupération des fragments alimenté par DAS (Database Autonomy Service). DAS détecte et exécute automatiquement la commande compact sur les nœuds Hidden pendant la fenêtre de maintenance de l'instance. Aucune intervention manuelle n'est requise et le processus n'affecte pas vos charges de travail.

Conditions de déclenchement et règles

Le système récupère automatiquement les fragments uniquement des collections qui remplissent simultanément les conditions suivantes :

  • La taille combinée de l'espace d'indexation et de l'espace de données dépasse 1 Go.

  • Le taux de fragmentation dépasse 20 %.

Règles supplémentaires :

  • La limite supérieure pour un seul cycle de récupération est de 100 Go. Tout excédent est récupéré lors des cycles suivants.

  • Seuls les nœuds Hidden sont concernés par la récupération. Les nœuds Hidden ne traitent pas le trafic métier, donc la récupération n'affecte pas les nœuds primary ou secondary.

  • Les seuils mentionnés ci-dessus sont intégrés au système et ne peuvent pas être personnalisés.

Point d'accès à la configuration

  1. Connectez-vous à la console MongoDB et accédez à l'instance cible.

  2. Dans le volet de navigation de gauche, sélectionnez CloudDBA > Storage Analysis.

  3. Dans la liste Data Space, localisez la colonne Fragmentation Rate et cliquez sur le lien Recycle.

  4. Dans la boîte de dialogue Fragment Recycling Plan qui s'affiche, cliquez sur Create Plan et confirmez.

Remarque

Ce point d'accès se trouve dans un lien d'en-tête de colonne du tableau d'analyse du stockage. Il ne s'agit pas d'un élément de menu autonome et il peut être facile à manquer. Une fois le plan créé, les collections qui répondent aux conditions de seuil sont automatiquement récupérées pendant les fenêtres de maintenance. Pour des instructions détaillées, consultez Analyse du stockage.

Méthode 2 : Récupération manuelle depuis la console

Utilisez cette méthode lorsque l'espace récupérable d'une collection dépasse 100 Go.

Lorsque l'espace récupérable d'une collection dépasse 100 Go, la récupération peut prendre plus d'une heure. Planifiez votre temps de récupération en conséquence.

Procédure

  1. Accédez à l'instance cible. Dans le volet de navigation de gauche, sélectionnez CloudDBA > Storage Analysis.

  2. Dans la liste Data Space, consultez le taux de fragmentation et l'espace récupérable pour chaque collection.

    Important

    Les opérations de récupération dans l'analyse du stockage de la console, ainsi que le taux de fragmentation et l'espace récupérable affichés sur la page, ciblent par défaut les nœuds Hidden.

  3. Pour les collections présentant des taux de fragmentation élevés que vous souhaitez récupérer, cliquez sur le bouton Recycle correspondant pour lancer l'exécution.

Vérifier la réussite de la récupération

Une fois la récupération terminée, exécutez à nouveau l'analyse du stockage et vérifiez si le taux de fragmentation de la collection cible a diminué. Assurez-vous de consulter le même nœud sur lequel la récupération a été effectuée (voir FAQ et dépannage).

Important

Si vous avez exécuté compact sur le nœud primary ou secondary via la ligne de commande, le taux de fragmentation dans l'analyse du stockage de la console ne changera pas. Cela ne signifie pas que la récupération a échoué. Accédez à la page Monitoring Information et basculez vers le nœud sur lequel vous avez réellement exécuté l'opération pour vérifier le résultat.

Méthode 3 : Commande compact en ligne de commande

Utilisez cette méthode lorsqu'une seule collection dépasse 100 Go, lorsque la récupération via la console est insuffisante ou lorsque vous avez besoin d'un contrôle précis.

Exigences en matière d'autorisations

L'exécution de la commande compact nécessite que le compte dispose des autorisations dbAdmin ou hostManager (version > 8.0). Sinon, une erreur d'autorisation sera signalée :

not authorized on <database> to execute command { compact: ... }

Impact de compact sur les charges de travail

  • Blocage des lectures/écritures et impact sur les performances

    • Avant MongoDB 4.4 : La commande compact verrouille la base de données contenant la collection, bloquant toutes les opérations de lecture et d'écriture sur cette base de données. Lorsque la fragmentation est sévère, compact peut prendre beaucoup de temps pour se terminer, ce qui peut entraîner un retard de réplication sur les nœuds Hidden. Nous vous recommandons de l'exécuter pendant les heures creuses, d'augmenter la taille de l'oplog en fonction de votre charge d'écriture ou de Mettre à niveau la version majeure de la base de données vers MongoDB 4.4 ou une version ultérieure avant de récupérer les fragments.

    • MongoDB 4.4 et versions ultérieures : La commande compact ne bloque plus les opérations de lecture et d'écriture, mais peut affecter les performances pendant l'exécution. Nous vous recommandons de l'exécuter pendant les heures creuses.

  • Reconstruction du nœud

    • MongoDB 3.4 (toutes versions), MongoDB 4.0 (toutes versions), MongoDB 4.2 versions mineures anciennes (4.0.22 ou antérieure) et MongoDB 4.4 versions mineures anciennes (5.0.6 ou antérieure) : Le nœud exécutant compact passe à l'état RECOVERING. Si cet état persiste trop longtemps, le composant de contrôle de santé peut signaler le nœud comme étant sain et déclencher une reconstruction automatique. Pour plus d'informations sur les versions de MongoDB, consultez Versions mineures de MongoDB.

    • Pour les instances exécutant des versions ultérieures : Le nœud exécutant compact reste à l'état SECONDARY et ne déclenche pas de reconstruction.

  • Quelle que soit la version, privilégiez toujours la récupération des fragments depuis les nœuds Hidden ou Secondary afin d'éviter d'impacter le nœud primary. Avant de récupérer les fragments de disque, nous vous recommandons de sauvegarder votre base de données.

Durée d'exécution de compact

La durée d'exécution dépend du volume de données, de la charge du système et d'autres facteurs, et ne peut pas être estimée avec précision. Les collections plus volumineuses avec une fragmentation plus importante prennent plus de temps. Les très grandes collections (plusieurs centaines de Go) peuvent prendre considérablement plus de temps. Nous vous recommandons d'utiliser dryRun: true pour estimer d'abord l'espace récupérable, et d'exécuter l'opération pendant les heures creuses.

Les données suivantes sont fournies à titre indicatif uniquement :

Test réel (MongoDB 4.4) : L'exécution de compact sur une collection d'environ 2,5 Go avec une fragmentation de 50 % a pris environ 5 secondes et a libéré environ 1,9 Go d'espace.

Scénarios où compact est inefficace

Les scénarios suivants peuvent rendre la commande compact inefficace :

  • La taille physique de la collection est inférieure à 1 Mo.

  • Le taux de fragmentation est inférieur à 20 %.

  • Moins de 20 % d'espace libre existe dans les 80 % premiers du fichier, ou moins de 10 % d'espace libre existe dans les 90 % premiers du fichier.

Pour plus d'informations, consultez block_compact.

Instances Replica Set

Important

Il n'est pas recommandé d'exécuter compact directement sur le nœud primary. Compact consomme d'importantes ressources d'E/S et de CPU, ce qui peut affecter les charges de travail en ligne lorsqu'il est exécuté sur le nœud primary. Nous vous recommandons de l'exécuter sur les nœuds Secondary, puis de faire tourner les nœuds via un basculement pour récupérer chaque nœud à tour de rôle.

Une instance autonome (StandAlone) ne comporte qu'un seul nœud. Connectez-vous-y et exécutez compact directement.

Connectez-vous à un nœud Secondary et exécutez les commandes suivantes :

use <database>

// Before reclamation: check database space usage for comparison
db.stats()

// Dry run: estimate reclaimable space without actually reclaiming
db.runCommand({ compact: "<collection>", dryRun: true })

// Actual reclamation
db.runCommand({ compact: "<collection>" })

// After reclamation: check again to compare space
db.stats()

Le paramètre dryRun: true active le mode dry run, qui renvoie uniquement estimatedBytesFreed (le nombre estimé d'octets pouvant être libérés) sans modifier aucun fichier. Après avoir examiné les résultats du dry run, supprimez ce paramètre et exécutez la récupération réelle. Exécutez db.stats() avant et après la récupération pour comparer l'utilisation de l'espace de la base de données et confirmer le résultat.

Remarque

Assurez-vous que l'opération compact précédente est terminée avant de démarrer une nouvelle opération sur la même collection.

À propos du paramètre force:true

Si vous vous connectez directement à un nœud primary actif et exécutez compact, vous recevrez l'erreur protectrice suivante :

will not run compact on an active replica set primary as this will slow down
other running operations. use force:true to force

Il s'agit d'un mécanisme de protection de MongoDB : l'exécution de compact sur le nœud primary ralentit les opérations en cours, donc le système le bloque par défaut. Le paramètre force doit être défini sur true lors de l'exécution sur le nœud primary. Le paramètre force:true contourne uniquement cette couche de protection. Il n'élimine pas l'impact sur vos charges de travail.

  • Évitez d'utiliser force:true sauf en cas de nécessité absolue.

  • Utilisez l'analyse du stockage de la console ou un plan de récupération automatique pour récupérer les nœuds Hidden, ou exécutez compact sur les nœuds Secondary à la place (ces nœuds ne nécessitent pas force).

  • Si vous devez absolument exécuter compact sur le nœud primary avec force:true, faites-le pendant les heures creuses et évaluez l'impact au préalable.

Instances Sharded Cluster

Pour les clusters shardés, vous devez uniquement récupérer les fragments des nœuds correspondants dans le composant Shard. Les composants Mongos et ConfigServer ne stockent pas de données utilisateur et ne nécessitent pas de récupération.

Les nœuds en lecture seule dans les clusters shardés ne prennent pas en charge la commande compact , vous ne pouvez donc pas récupérer les fragments des nœuds en lecture seule (ReadOnly).

Récupération des fragments des nœuds Secondary : Lors de l'exécution de runCommandOnShard, vous devez définir la préférence de lecture sur Secondary. La syntaxe varie selon le client. Sélectionnez la méthode appropriée pour votre client :

mongosh 2.x

mongosh 2.x prend en charge la spécification directe de la préférence de lecture dans le deuxième paramètre de runCommand :

db.runCommand({runCommandOnShard:"<Shard ID>","command":{compact:"<collection_name>"}},{readPreference: "secondary"})

mongosh 1.x

mongosh 1.x nécessite de définir la préférence de lecture via setReadPref avant d'exécuter la commande :

db.getMongo().setReadPref('secondary')
db.runCommand({runCommandOnShard:"<Shard ID>","command":{compact:"<collection_name>"}})

mongo shell (legacy)

mongo shell (legacy) nécessite d'ajouter $queryOptions pour spécifier la préférence de lecture :

db.runCommand({runCommandOnShard:"<Shard ID>","command":{compact:"<collection_name>"},$queryOptions: {$readPreference: {mode: 'secondary'}}})

Récupération des fragments des nœuds Primary (non recommandé) :

Important

Afin de minimiser l'impact sur le service, nous vous recommandons d'effectuer un basculement primary/secondary pour faire passer le nœud Primary à un nœud Secondary, puis de récupérer les fragments du nouveau nœud Secondary. Pour obtenir des instructions sur le basculement primary/secondary, consultez Basculement primary/secondary pour une instance sharded cluster.

db.adminCommand({
  runCommandOnShard: "<shardId>",
  dbName: "<database>",
  command: { compact: "<collection>", force: true }
})

FAQ et dépannage

Récupération exécutée mais sans effet visible

Vérifiez les points suivants dans l'ordre :

  1. Incompatibilité de nœud entre l'opération et la vérification (cause la plus fréquente) : L'analyse du stockage de la console récupère les fragments des nœuds Hidden, et la page affiche par défaut le taux de fragmentation des nœuds Hidden. La commande compact en ligne de commande affecte le nœud auquel vous êtes connecté. Si vous avez exécuté compact sur le nœud primary ou secondary mais que vous avez vérifié le taux de fragmentation dans l'analyse du stockage de la console, les chiffres ne changeront pas. Approche correcte : Accédez à la page Monitoring Information et basculez vers le nœud sur lequel vous avez réellement effectué l'opération pour afficher l'utilisation de l'espace disque.

  2. Fragmentation interne des fichiers : compact ne peut tronquer que l'espace libre contigu à la fin d'un fichier. L'espace réutilisable au sein du fichier ne peut pas être récupéré. Si les fragments sont distribués à l'intérieur du fichier, l'espace disque peut rester presque inchangé après compact. Il s'agit d'un comportement attendu du moteur de stockage WiredTiger, et non d'un échec. Exécutez db.<collection>.stats() et vérifiez le ratio de freeStorageSize par rapport à storageSize pour estimer l'espace récupérable.

  3. En dessous du seuil de récupération : Si le taux de fragmentation est inférieur à 20 %, si la taille physique de la collection est inférieure à 1 Mo ou si la collection est petite, l'espace récupérable absolu est très faible et la récupération peut n'avoir aucun effet visible.

  4. Protection du nœud Primary ayant bloqué l'opération : Si vous voyez use force:true to force, il s'agit du mécanisme de protection indiquant que compact a été exécuté sur le nœud primary. N'utilisez pas force. Exécutez plutôt compact sur un nœud Hidden ou Secondary, ou utilisez l'analyse du stockage de la console pour récupérer les nœuds Hidden.

Pourquoi le taux de fragmentation ne tombe-t-il pas à 0 % ?

Il s'agit d'un comportement attendu. compact ne récupère que l'espace libre contigu à la fin d'un fichier. L'espace réutilisable au sein du fichier est préservé pour les écritures futures. Par conséquent, le taux de fragmentation ne peut généralement pas tomber à 0 %. Il s'agit d'un choix de conception du moteur de stockage WiredTiger.

Erreur : not authorized / Unauthorized

L'exécution de compact nécessite les autorisations dbAdmin ou hostManager (version > 8.0). Sinon, une erreur d'autorisation sera signalée. Voir Exigences en matière d'autorisations.

Erreur : Interrupted ... cache eviction pressure

Cause : Pendant l'exécution de compact, le moteur de stockage WiredTiger subit une pression d'éviction du cache. Les versions plus anciennes et les instances de petites spécifications disposent de ressources mémoire limitées. Lorsque la pression du cache devient trop élevée et que le moteur ne peut pas évacuer les pages à temps, compact est interrompu et se termine prématurément.

Résolution : Réessayez pendant les heures creuses, déclenchez un basculement primary/secondary et réessayez, ou mettez à niveau la spécification de l'instance avant de procéder à la récupération.

Puis-je exécuter compact lorsque l'instance est verrouillée en raison d'un disque plein ?

Oui. Lorsque le disque est plein, l'instance passe à un état verrouillé. Les opérations d'écriture (insert) et de suppression (delete) sont rejetées avec l'erreur cloud instance error, disk locked..., mais les opérations find, compact et drop peuvent toujours être exécutées.

Remarque

Pourquoi l'opération de suppression est-elle également rejetée ?

L'opération de suppression elle-même écrit dans l'oplog et consomme toujours de l'espace disque, elle est donc également rejetée dans l'état verrouillé. Cependant, drop et compact sont des opérations au niveau des métadonnées ou de réorganisation de l'espace et sont autorisées par le système. Dans l'état verrouillé, vous pouvez exécuter compact pour récupérer les fragments et libérer de l'espace, ou exécuter drop pour supprimer des collections et libérer de l'espace. Ces deux options sont des voies de récupération qui ne nécessitent pas de mise à l'échelle.

Décision de récupération la plus rapide

Votre situation

Action recommandée

Vitesse de récupération

Coût

Vous disposez de collections ou de bases de données inutilisées qui peuvent être supprimées en toute sécurité.

Exécutez drop (drop est autorisé dans l'état verrouillé).

Après la libération d'espace, l'instance se déverrouille automatiquement en environ 4 à 5 minutes (il y a un délai de détection ; ce n'est pas instantané).

Aucun coût, mais les données sont supprimées. Confirmez que les données peuvent être supprimées.

Les données ne peuvent pas être supprimées, mais il existe d'importants fragments à récupérer.

Exécutez compact (compact est autorisé dans l'état verrouillé).

Après que compact a libéré de l'espace, l'instance se déverrouille automatiquement en environ 5 minutes (il y a un délai de détection ; ce n'est pas instantané).

  • Aucun coût, aucune suppression de données.

  • L'efficacité de la récupération dépend du taux de fragmentation et de la distribution.

  • Peut affecter les performances du service. Voir Impact de compact sur les charges de travail.

Aucune donnée à supprimer / les données ne peuvent pas être perdues.

Augmenter l'espace de stockage.

Déverrouillage après la fin de la mise à l'échelle.

Remarque

Après le déverrouillage, récupérez rapidement les fragments ou nettoyez les données inutilisées pour éviter que le disque ne se remplisse à nouveau. Consultez Résoudre le verrouillage de l'instance causé par l'épuisement de l'espace disque.

L'utilisation dans la console ne correspond pas aux alertes (par exemple, la console affiche 60 % mais l'alerte se déclenche à 90 %)

Cela est dû à des dimensions d'affichage différentes, et non à une erreur de données :

  • Les alertes se déclenchent sur le « nœud unique le plus élevé » : Dans un replica set, l'utilisation du disque des nœuds Primary, Secondary et Hidden peut différer (les nœuds Secondary/Hidden sont souvent plus élevés que Primary en raison de l'oplog, du timing de récupération, des fichiers temporaires et d'autres raisons). Une alerte se déclenche lorsqu'un seul nœud dépasse le seuil.

  • La console n'affiche pas le « nœud le plus élevé » par défaut : La page Basic Information de l'instance affiche une valeur agrégée, et la page Storage Analysis affiche par défaut le nœud Hidden. Les deux peuvent être inférieurs au nœud qui a déclenché l'alerte.

Comment afficher l'utilisation réelle de chaque nœud : Accédez à la page Monitoring Information de l'instance, basculez le mode d'affichage sur Sub-node independent et vous pourrez afficher individuellement l'utilisation de l'espace disque de chaque nœud Primary / Secondary afin de trouver le nœud à forte utilisation qui a déclenché l'alerte.

Pour plus d'informations sur les raisons pour lesquelles l'utilisation du disque des nœuds primary et secondary diffère et comment y remédier, consultez Utilisation élevée de l'espace disque des instances ApsaraDB for MongoDB.

Puis-je réduire la taille du disque pour économiser de l'argent ?

La réduction de taille n'est pas prise en charge. ApsaraDB for MongoDB ne permet pas de réduire l'espace disque acheté, quelle que soit la version. Même si vous avez nettoyé une grande quantité de données et récupéré des fragments, vous ne pouvez que maintenir ou augmenter la spécification du disque. Vous ne pouvez pas la réduire directement.

Si vous avez besoin d'une spécification de disque plus petite, la seule option consiste à créer une nouvelle instance avec une spécification plus petite, à migrer vos données à l'aide de DTS, puis à libérer l'instance d'origine. Évaluez le coût de migration et la fenêtre d'interruption avant de procéder.

Pour les changements de configuration et les limites de spécification, consultez Modifier la configuration d'une instance replica set.

Annexe

Pourquoi des fragments de disque apparaissent-ils ?

Lorsque des données sont supprimées via la commande delete ou par expiration TTL, elles sont uniquement marquées comme supprimées. L'espace qu'elles occupaient n'est pas immédiatement restitué au système d'exploitation. Au lieu de cela, il est conservé sous forme de blocs libres pour les écritures futures. Lorsque les suppressions dépassent les écritures, ces blocs libres restent inutilisés pendant de longues périodes, formant des fragments. C'est pourquoi l'utilisation du disque reste élevée même après la diminution du volume de données.

Quand récupérer les fragments de disque

Envisagez de récupérer les fragments de disque dans les situations suivantes :

  • Après la suppression d'un grand volume de données : Lorsque vous supprimez un grand nombre de documents, l'espace libéré n'est pas restitué au système d'exploitation mais réservé pour les écritures futures, laissant un espace fragmenté important sur le disque.

    Important

    La suppression manuelle (delete) et l'expiration TTL ne récupèrent pas automatiquement les fragments de disque. Une récupération manuelle est nécessaire.

  • Après des charges de travail d'écriture élevées prolongées : Des charges de travail d'écriture soutenues et élevées (insertions, mises à jour et suppressions fréquentes) accumulent progressivement de l'espace fragmenté sur le disque.

  • Lorsque l'espace disque est faible et que la fragmentation dépasse 20 % : Lorsque l'utilisation du disque atteint 85 à 90 % ou plus, la récupération des fragments peut libérer de l'espace et réduire la pression sur le stockage.

Afficher et estimer l'espace récupérable

Connectez-vous à l'instance (pour les instances replica set, connectez-vous à un nœud Secondary pour minimiser l'impact sur le service) et exécutez db.runCommand({collStats: "<collection>"}) pour afficher l'état de stockage d'une collection. Prêtez attention aux champs suivants :

  • size : La taille de stockage logique de la collection.

  • storageSize : La taille de stockage physique de la collection.

  • freeStorageSize : L'espace libre récupérable au sein de la collection (disponible dans MongoDB 4.4 et versions ultérieures).

Après la suppression de documents avec la commande remove, size diminue, mais storageSize peut ne pas changer. Un ratio plus élevé de freeStorageSize par rapport à storageSize indique un taux de fragmentation plus élevé.

Vous pouvez également exécuter la commande suivante pour estimer l'espace de fragments récupérable d'une collection (renvoie le nombre d'octets réutilisables) :

db.<collection>.stats().wiredTiger["block-manager"]["file bytes available for reuse"]
Remarque

Pour les instances presque vides, freeStorageSize peut renvoyer null. Dans ce cas, vérifiez wiredTiger["block-manager"]["file bytes available for reuse"] (octets réutilisables) et ["file size in bytes"] (taille totale du fichier) pour estimer le ratio de fragmentation. Pour les descriptions des champs, consultez Sortie collStats.