Comment mongodb récupère-t-il l'espace qui devrait être libéré après la « réduction » du document ?
漂亮男人
漂亮男人 2017-05-02 09:24:24
0
2
600

La version utilisée est mongodb-win32-x86_64-3.2.1, et le moteur de stockage WiredTiger par défaut est utilisé.

Il y a environ 4 millions de documents dans une collection, occupant 40 Go d'espace ; plus tard, la partie inutile de chaque traitement de document a été parcourue et mise à jour (le document n'a pas été supprimé). . Selon ses statistiques de sortie, le document La réduction globale a été réduite à environ 45 % de l'original, ce qui signifie que plus de 20 Go d'espace ont été libérés. Cependant, la taille du fichier de base de données n'a pas diminué, mais a augmenté. un peu (environ 1%).

Lisez le chapitre sur le stockage dans le document, https://docs.mongodb.com/v3.2...,其中提到删除文档导致的空记录占用空间可通过compact回收(使用WiredTiger存储引擎时),没提到前述这种修改文档形成的“虚占空间”的情形,我运行了compact,几秒钟就结束了,存储文件没有变小。那么该怎么办呢?

> use cache
switched to db cache
> db.htmldocs.runCommand("compact")
{ "ok" : 1 }
> db.runCommand({compact: "htmldocs"})
{ "ok" : 1 }
漂亮男人
漂亮男人

répondre à tous(2)
左手右手慢动作

Oui, si WT utilise la dernière version compact il peut effectivement récupérer de l'espace, mais à cause d'un bug cela devrait prendre effet après une certaine version de 3.2. Je ne me souviens plus du numéro de version spécifique (3.2.9 ? ). Mais il est certain que la version 3.2.1 n'est définitivement pas valide, et la mise à niveau vers la dernière version 3.2.12 résoudra définitivement ce problème.
Comparé à repairDatabase, compact semble être plus léger, mais le problème inévitable est qu'il s'agit toujours d'une opération lourde. Imaginez la défragmentation de disque sous Windows, le principe est le même. Une approche plus recommandée et moins efficace consiste à utiliser un jeu de réplicas pour réinitialiser progressivement tous les nœuds, et l'espace peut être libéré.

La question la plus importante est la suivante : la reconquête de cet espace a-t-elle réellement un sens pour vous ? La plupart du temps, le fait que le système ait occupé ces espaces signifie qu’il est susceptible d’occuper à nouveau ces espaces (à moins que la conception du système ne change). Au lieu de le libérer et de le réaffecter plus tard, il est préférable de le conserver et le système le réutilisera.

伊谢尔伦

Ce qui suit est ma compréhension :

1. Le compactage d'une seule collection ne récupérera pas l'espace de stockage du système de fichiers ; seul db.repairDatabase() de la base de données entière peut récupérer l'espace de stockage du système de fichiers. Veuillez essayer d'utiliser repirDatabase().

2. Vous pouvez également utiliser la méthode de collecte export/import

Soyez conscient de l'impact des opérations ci-dessus sur les performances du système. Pour référence.

Je suis en vacances ces jours-ci et je vous souhaite par avance de joyeuses vacances de la Fête du Printemps.

J'adore MongoDB ! Amusez-vous !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal