sql >> Databáze >  >> NoSQL >> MongoDB

Pochopení a správa diskového prostoru na vašem serveru MongoDB

Diskové úložiště je kritickým zdrojem pro jakýkoli škálovatelný databázový systém. Výkon vašich diskových databází bude záviset na tom, jak jsou data na disku spravována. Váš server MongoDB podporuje různé zásuvné moduly úložiště, které se starají o správu úložiště a zpočátku ukládají všechny dokumenty postupně. Jak databáze roste a probíhá více operací zápisu, tento souvislý prostor se fragmentuje na menší bloky s kusy volného místa mezi nimi. Typickým řešením je zvětšit velikost disku, existují však alternativy, které vám mohou pomoci znovu získat volné místo, aniž byste museli velikost disku měnit. Jedna důležitá věc, kterou je třeba si uvědomit, je statistika úložiště MongoDB a jak můžete zkomprimovat nebo opravit databázi, aby zvládla fragmentaci.

Jak velká je skutečně vaše databáze?

Vždy byste měli dávat pozor na množství volného místa na disku na vašem produkčním serveru a také obezřetně znát velikost databáze, když za ni platíte na cloudové platformě. MongoDB má příkaz db.stats()  které mohou poskytnout přehled o statistikách úložiště instance MongoDB.

>db.stats()
{
	"db" : "test",
	"collections" : 5,
	"views" : 0,
	"objects" : 53829,
	"avgObjSize" : 43.555,
	"dataSize" : 2344556121,
	"storageSize" :3124416336,
	"numExtents" : 0,
	"indexes" : 7,
	"indexSize" : 8096876,
	"ok" : 1
}

dataSize

Celková velikost nekomprimovaných dat v bajtech uchovávané v této databázi.

velikost úložiště

Celkové množství místa na disku přidělené všem kolekcím v databázi.

Odpověď db.stats()  závisí na typu motoru MongoDB. Popis výše uvedených metrik v závislosti na verzi naleznete v dokumentaci MongoDB.

Proč je velký rozdíl mezi velikost úložiště a dataSize ? To je způsobeno fragmentací datových souborů vysvětlenou výše. MongoDB se snaží znovu využít volné místo mezi fragmentovanými daty, kdykoli je to možné, a neuvolňuje je operačnímu systému. Ve WiredTiger však může být storageSize menší než dataSize, pokud je povolena komprese.

V případě, že je z kolekce smazán velký kus dat a sbírka nikdy nevyužívá odstraněný prostor pro nové dokumenty, je třeba tento prostor vrátit operačnímu systému, aby jej mohly používat vaše další databáze nebo kolekce. Budete muset spustit kompakt nebo opravit operaci za účelem defragmentace místa na disku a opětovného získání použitelného volného místa.

Komprimování MongoDB

Kompaktní operace MongoDB přepíše všechny dokumenty a indexy v kolekci na souvislé bloky místa na disku. Tato operace však zablokuje všechny ostatní operace s databází, do které kolekce patří. Takže u samostatného serveru se doporučuje spouštět jej během období údržby a u sad replik byste jej měli spouštět postupně pro každý fragment. To znamená nejprve zkomprimovat všechny sekundární a poté primární, aby nebyla ovlivněna dostupnost vaší databáze. Syntaxe příkazu je:

db.runCommand({compact: collection-name })

1. MMAPv1

  • Operace komprimace defragmentuje datové soubory a indexy. Mějte však na paměti, že neuvolňuje místo operačnímu systému. Tato operace je stále užitečná pro defragmentaci a vytvoření více souvislého prostoru pro opětovné použití MongoDB, ale je k ničemu, když je volné místo na disku velmi málo.
  • Během operace komprimace je vyžadováno další místo na disku až 2 GB.
  • Během operace komprimace je zablokován zámek na úrovni databáze.

2. WiredTiger

Modul WiredTiger poskytuje ve výchozím nastavení kompresi, která zabírá méně místa na disku než MMAPv1.

  • Kompaktní proces uvolňuje volné místo operačnímu systému.
  • Pro spuštění kompaktní operace je vyžadováno minimální místo na disku.
  • WiredTiger také blokuje všechny operace s databází, protože vyžaduje zámek na úrovni databáze.

Pokud používáte WiredTiger, doporučujeme spustit kompaktní operaci, když úložiště dosáhne 80 % velikosti disku. Můžete to provést spuštěním operace „Kompakt“ na naší stránce podrobností.

Opravit MongoDB

MongoDB oprava operace opravuje všechny chyby a nekonzistence v ukládání dat, podobně jako příkaz fcsk pro systém souborů. Tento příkaz zajišťuje integritu dat po neočekávaném vypnutí nebo havárii. Je-li však na serveru povoleno žurnálování, není potřeba oprava, protože server používá žurnál k tomu, aby se po restartu automaticky dostal do čistého stavu. Pokud byla vaše databáze poškozena, pak opravte databázi nezachrání poškozená data, proto se nedoporučuje používat tuto operaci pro obnovu dat když máte jiné možnosti.

U MMAPv1  opravte databázi je jediný způsob, jak získat zpět místo na disku, pokud si myslíte, že vaše databáze nebyla poškozena a má dostatek místa vyžadovaného operací opravy. Syntaxe příkazu je:

db.runCommand({repairDatabase: 1})
  • Tento příkaz zkomprimuje všechny kolekce v databázi a znovu vytvoří všechny indexy.
  • Úloha vyžaduje volné místo na disku rovnající se velikosti vaší aktuální datové sady plus 2 gigabajty.

Ve ScaleGrid používáme repairDatabase operaci k získání volného místa pro MMAPv1 shluky motorů.


  1. Dotazování po naplnění v Mongoose

  2. Nechci začínat mongoda s `sudo mongod`

  3. Mongoose – ověření syntaxe e-mailu

  4. node.js nemůže najít modul 'mongodb'