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

Oprava chyb stránky v MongoDB

Chyby stránek jsou běžnou chybou, která se většinou vyskytuje ve velkých aplikacích zahrnujících velká data. Dochází k tomu, když databáze MongoDB čte data z fyzické paměti spíše než z virtuální paměti. Chyby stránky se vyskytují v okamžiku, kdy chce MongoDB získat data, která nejsou dostupná v aktivní paměti databáze, a proto je nucena číst z disku. To vytváří velkou latenci pro operace propustnosti, takže dotazy vypadají, jako by se zpožďovaly.

Úprava výkonu MongoDB pomocí ladění je životně důležitá součást, která optimalizuje provádění aplikace. Databáze jsou vylepšeny tak, aby pracovaly s informacemi uloženými na disku, ale ve snaze získat přístup na disk obvykle ukládají do mezipaměti velké množství dat v paměti RAM. Ukládání dat z databáze a přístup k nim je nákladné, proto je nutné informace nejprve uložit na disk, než k nim aplikace přistoupí. Vzhledem k tomu, že disky jsou ve srovnání s datovou mezipamětí RAM pomalejší, proces spotřebovává značné množství času. Proto je MongoDB navržen tak, aby hlásil výskyt chyb stránky jako souhrn všech incidentů během jedné sekundy

Topologie pohybu dat v MongoDB

Data z klienta se přesouvají do virtuální paměti , kde je mezipaměť stránky čte tak, jak jsou zapisována, a data jsou poté uložena na disk, jak je znázorněno na obrázku níže.

Jak najít chyby stránky MongoDB

Chyby stránek lze detekovat pomocí výkonu zamykání, který zajišťuje konzistenci dat v MongoDB. Když daná operace stojí ve frontě nebo běží dlouhou dobu, výkon MongoDB se sníží a operace se zpomalí, protože čeká na uzamčení. To vede ke zpomalení, protože zpoždění související se zámkem jsou sporadická a někdy ovlivňují výkon aplikace. Zámek ovlivňuje výkon aplikace, když jsou zámky rozděleny (locks.timeAcquiringMicros by locks.acquireWaitCount), což udává průměrnou dobu čekání na daný režim zámku. Locks.deadLockCount udává součet všech akvizic zámků, které zažil. Vzhledem k tomu, že hodnota globalLock.totalTime je harmonicky vysoká, existuje mnoho požadavků, které očekávají zámek. Čím více požadavků čeká na zámek, spotřebovává se více paměti RAM, což vede k zobrazení stránky Chyby.

Můžete také použít mem.mapped, který umožňuje vývojářům prozkoumat celkovou paměť, kterou mongod využívá. Mem.mapped je operátor serveru pro kontrolu množství paměti v megabajtech (MB) v úložišti MMAPv1. Pokud operátor mem.mapped zobrazí hodnotu A větší než celkové množství systémové paměti, dojde k chybě stránky, protože tak velké využití paměti povede k chybě stránky v databázi.

Jak v MongoDB dochází k chybám stránek

Načítání stránek v MongoDB závisí na dostupnosti volné paměti, v případě, že jí chybí volná paměť, musí operační systém:

  1. Vyhledejte stránku, kterou databáze přestala používat, a zapište ji na paměťový disk.
  2. Po přečtení z disku požadovanou stránku načtěte do paměti.

Tyto dvě činnosti probíhají při načítání stránek, a proto ve srovnání se čtením v aktivní paměti zabírají mnoho času, což vede k výskytu chyb stránek.

Řešení chyb stránky MongoDB

Níže jsou uvedeny některé způsoby, jak vyřešit chyby stránky: 

  1. Vertikální škálování na zařízení s dostatečnou pamětí RAM nebo vodorovné škálování: Pokud je pro danou datovou sadu nedostatek paměti RAM, je správným postupem zvětšit paměť RAM vertikálním škálováním na zařízení s více RAM, aby se přidalo více zdrojů na server. Vertikální škálování je jedním z nejlepších a snadných způsobů, jak zvýšit výkon MongoDB tím, že se zátěž nerozloží mezi více serverů. Vzhledem k tomu, že vertikální škálování přidává více paměti RAM, horizontální škálování umožňuje přidání více útržků do sdíleného clusteru. Jednoduše řečeno, horizontální škálování je místo, kde je databáze rozdělena do různých částí a uložena na více serverech. Horizontální škálování umožňuje vývojářům přidávat další servery za chodu, což výrazně zvyšuje výkon databáze, protože nezpůsobuje žádné prostoje. Vertikální škálování a horizontální škálování redukuje výskyt chyb stránky zvětšením paměti, se kterou se pracuje při práci s databází.
  2. Správně indexujte data: Používejte vhodné indexy, abyste zajistili, že budou existovat účinné dotazy, které nezpůsobí prohledávání kolekce. Správné indexování zajišťuje, že databáze neopakuje každý dokument v kolekci, a tím řeší možný výskyt chyby chyby stránky. Skenování kolekce způsobí chybu chyby stránky, protože dotazovací stroj kontroluje celou kolekci při jejím načítání do paměti RAM. Většina dokumentů ze skenu sbírky se do aplikace nevrátí, a proto způsobuje zbytečné chyby stránky pro každý následující dotaz, kterému není snadné se vyhnout. Kromě toho mohou nadměrné indexy také vést k neefektivnímu využití paměti RAM, což může vést k chybě chyby stránky. Správné indexování je proto prvořadé, pokud má vývojář v úmyslu vyřešit chyby chyb stránky. MongoDB nabízí pomoc při určování indexů, které byste měli nasadit při používání databáze. Nabízejí jak Slow Query Analyzer, který poskytuje potřebné informace o tom, jak indexovat uživatele, tak sdílené uživatele.
  3. Migrace na nejnovější verzi MongoDB a přesunutí aplikace do WiredTiger. To je nezbytné, pokud se chcete vyhnout chybám při chybě stránky, protože chyby stránky jsou běžné pouze v úložných strojích MMAPv1 na rozdíl od novějších verzí a WiredTiger. Úložný modul MMAPv1 byl zastaralý a MongoDB jej již nepodporuje. WiredTiger je aktuální výchozí modul úložiště v MongoDB a má MultiVersion Concurrency Control, díky kterému je mnohem lepší ve srovnání s modulem úložiště MMAPv1. S WiredTiger MongoDB může používat jak mezipaměť systému souborů, tak vnitřní mezipaměť WiredTiger, která má velmi velkou velikost buď 1 GB (50% 0f (RAM - 1 GB)) nebo 256 MB.
  4. Mějte přehled o celkové paměti RAM dostupné pro použití ve vašem systému. To lze provést pomocí služeb, jako je monitorování New Relic Google Cloud Monitoring. Navíc lze BindPlane využít se zmíněnými cloudovými monitorovacími službami. Používání monitorovacího systému je proaktivní opatření, které umožňuje čelit chybám stránek dříve, než k nim dojde, místo aby na vzniklé chyby reagovali. BindPlane umožňuje monitoru nastavit stálá upozornění na výskyt chyb stránky, upozornění také upozorní na počet indexů, velikost indexu a velikost souboru.
  5. Zajištění, že data jsou nakonfigurována do převládající pracovní sady a nebudou využívat více paměti RAM, než je doporučeno. MongoDB je databázový systém, který funguje nejlépe, když se často používaná data a indexy perfektně vejdou do přidělené paměti. Velikost paměti RAM je důležitým aspektem při optimalizaci výkonu databáze, proto je třeba před nasazením aplikace zajistit, aby byl vždy dostatek paměti RAM.
  6. Rozložení zátěže mezi instancemi mongodů přidáním fragmentů nebo nasazením sdíleného clusteru. Je životně důležité umožnit stínování tam, kde se cílová kolekce nachází. Nejprve se připojte k mongos v mongo shell a použijte metodu níže.
    1. sh.shardCollection()

      Poté vytvořte index touto metodou.

      ​db.collection.createIndex(keys, options)
      Vytvořený index podporuje shard key, tedy pokud vytvořená kolekce již přijala nebo uložila nějaká data. Pokud však sbírka neobsahuje žádná data (prázdná), použijte k jejímu indexování jako součást ssh.shardCollection metodu níže: sh.shardCollection()
    2. Poté následuje jedna ze dvou strategií poskytovaných mongoDB.
      1. Hašované stínování 
        sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )
      2. Stínování na základě rozsahu 
        sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )

Jak předcházet chybám stránky MongoDB

  1. Přidejte fragmenty nebo nasaďte sdílený cluster za účelem rozložení zátěže
  2. Mějte dostatek paměti RAM pro aplikaci před jejím nasazením
  3. Přejděte na novější verze MongoDB a poté pokračujte na WiredTiger
  4. U zařízení s větší pamětí RAM lze škálovat svisle nebo vodorovně 
  5. Používejte doporučenou RAM a sledujte využité místo RAM

Závěr 

Několik chyb stránek (samotných) trvá krátkou dobu, avšak v situaci, kdy existuje mnoho chyb stránky (agregát), je to známkou toho, že databáze čte velké množství dat v disku. Když dojde k agregaci, dojde k dalším zámkům čtení MongoBD, které povedou k chybě stránky.

Při použití MongoDB může velikost paměti RAM pro systém a počet dotazů výrazně ovlivnit výkon aplikace. Výkon aplikace v MongoDB do značné míry závisí na dostupné paměti RAM ve fyzické paměti, což má vliv na dobu, kterou aplikace potřebuje k provedení jediného dotazu. S dostatkem paměti RAM se omezí výskyt chyb stránek a zvýší se výkon aplikace.


  1. Práce s klíči v redis

  2. Jak určit dobu provádění skriptu Lua v Redis?

  3. Redis se v systému Windows 7 nespustí jako služba systému Windows

  4. Skupina ovladačů MongoDB .NET podle časového rozsahu