Sdílet prostřednictvím


Řešení problémů s nedostatkem paměti

platí pro:SQL Server

In-Memory OLTP používá více paměti a různými způsoby než SQL Server. Je možné, že množství paměti, kterou jste nainstalovali a přidělil In-Memory OLTP je nedostatečné pro vaše rostoucí potřeby. Pokud ano, mohlo by dojít k nedostatku paměti. Toto téma popisuje, jak se zotavit ze situace nedostatku paměti (OOM). Pokyny, které vám pomůžou vyhnout se mnoha situacím OOM, najdete v tématu Monitorování a řešení potíží s využitím paměti.

Probírané v tomto tématu

Námět Přehled
Řešení selhání obnovení databáze kvůli OOM Co dělat, když se zobrazí chybová zpráva: "Operace obnovení pro databázi '<databaseName>' selhala kvůli nedostatku paměti ve fondu zdrojů '<resourcePoolName>'."
Řešení dopadů nedostatku paměti nebo stavů OOM na pracovní zátěž Co dělat, když zjistíte, že problémy s nedostatkem paměti mají negativní dopad na výkon.
Vyřešte selhání alokace paměti pro stránky kvůli nedostatku paměti, pokud je k dispozici dostatek paměti Co dělat, když se zobrazí chybová zpráva " Zákaz přidělování stránek pro databázi '<databaseName>' kvůli nedostatku paměti ve fondu zdrojů '<resourcePoolName>'. ..." je-li k dispozici dostatečná paměť pro operaci.
osvědčené postupy při používání In-Memory OLTP v prostředí virtuálního počítače Co je potřeba mít na paměti při použití In-Memory OLTP ve virtualizovaném prostředí.

Řešení selhání obnovení databáze kvůli OOM

Při pokusu o obnovení databáze se může zobrazit chybová zpráva: "Operace obnovení se nezdařila pro databázi '<databaseName>' kvůli nedostatku paměti ve fondu prostředků '<resourcePoolName>'." To znamená, že server nemá dostatek dostupné paměti pro obnovení databáze.

Server, který obnovíte databázi, musí mít dostatek paměti pro tabulky optimalizované pro paměť v zálohování databáze, jinak databáze nebude online a bude označena jako podezřelá.

Pokud má server dostatek fyzické paměti, ale stále se zobrazuje tato chyba, může se jednat o to, že jiné procesy používají příliš mnoho paměti nebo problém s konfigurací způsobí, že není k dispozici dostatek paměti pro obnovení. Pro tuto třídu problémů použijte následující míry k zpřístupnění větší paměti pro operaci obnovení:

  • Dočasně zavřete spuštěné aplikace.
    Zavřením jedné nebo více spuštěných aplikací nebo zastavením služeb, které v tuto chvíli nepotřebujete, nastavíte paměť, kterou používala pro operaci obnovení. Po úspěšném obnovení je můžete restartovat.

  • Zvyšte hodnotu MAX_MEMORY_PERCENT.
    Pokud je databáze vázána na fond zdrojů, což je osvědčený postup, řídí se paměť dostupná k obnovení MAX_MEMORY_PERCENT. Pokud je hodnota příliš nízká, obnovení selže. Tento fragment kódu změní MAX_MEMORY_PERCENT fondu zdrojů PoolHk na 70% nainstalované paměti.

    Důležitý

    Pokud server běží na virtuálním počítači a není vyhrazený, nastavte hodnotu MIN_MEMORY_PERCENT na stejnou hodnotu jako MAX_MEMORY_PERCENT.
    Další informace najdete v tématu Osvědčené postupy s využitím In-Memory OLTP v prostředí virtuálního počítače.

    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    Informace o maximálních hodnotách pro MAX_MEMORY_PERCENT naleznete v části tématu Procento paměti dostupné pro tabulky optimalizované pro paměť a indexy.

  • Zvýšení maximální paměti serveru.
    Informace o konfiguraci maximální paměti serveru naleznete v tématu Možnosti konfigurace serveru paměti.

Řešení dopadu nedostatku paměti nebo podmínek OOM na úlohu

Samozřejmě je nejlepší nedostat se do situace s nedostatkem paměti nebo OOM (Out of Memory). Dobré plánování a monitorování může pomoct vyhnout se situacím OOM. Přesto nejlepší plánování nepředpoví vždy, co se skutečně stane, a můžete skončit s nedostatkem paměti nebo OOM. Obnovení z OOM je potřeba provést dvěma kroky:

  1. Otevřete DAC (Vyhrazené připojení správce)

  2. provést nápravnou akci

Otevřít DAC (vyhrazené připojení správce)

SQL Server poskytuje vyhrazené připojení správce (DAC). DaC umožňuje správci přistupovat ke spuštěné instanci databázového stroje SQL Serveru, aby vyřešil problémy na serveru, i když server nereaguje na jiná klientská připojení. DaC je k dispozici prostřednictvím nástroje sqlcmd a aplikace SQL Server Management Studio.

Pokyny k používání DAC prostřednictvím SSMS nebo sqlcmdnajdete v tématu Diagnostické připojení pro správce databází.

Provedení nápravné akce

Pokud chcete vyřešit stav OOM, musíte uvolnit stávající paměť snížením využití nebo uvolnit více paměti pro tabulky v paměti.

Uvolnění existující paměti

Odstraňte řádky tabulky optimalizované pro paměť, které nejsou nezbytné, a počkejte na uvolňování paměti.

Z tabulky optimalizované pro paměť můžete odebrat jiné než základní řádky. Garbage collector vrátí paměť používanou těmito řádky do volné paměti. OLTP modul využívající paměť sbírá odpadky z řádků rychle. Dlouhotrvající transakce však může zabránit provádění garbage collection. Pokud máte například transakci, která běží po dobu 5 minut, všechny verze řádků vytvořené kvůli operacím aktualizace nebo odstranění, zatímco byla transakce aktivní, nemohou být uvolněny z paměti.

Přesunutí jednoho nebo více řádků do tabulky založené na disku

Následující články TechNetu obsahují pokyny k přesouvání řádků z tabulky optimalizované pro paměť na tabulku založenou na disku.

Zvýšení dostupné paměti

Zvýšení hodnoty MAX_MEMORY_PERCENT ve fondu zdrojů

Pokud jste pro tabulky v paměti nevytvořili pojmenovaný fond zdrojů, měli byste to udělat a svázat In-Memory databáze OLTP s ním. Pokyny k vytvoření datové vazby vašich databází In-Memory OLTP s fondem zdrojů najdete v tématu Vytvoření vazby databáze In-Memory OLTP s tabulkami Memory-Optimized na fond zdrojů.

Pokud je databáze OLTP In-Memory svázaná s fondem zdrojů, možná budete moct zvýšit procento paměti, ke které má fond přístup. Pokyny ke změně hodnoty MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT pro fond zdrojů najdete v dílčím tématu Změna MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT u existujícího fondu.

Zvyšte hodnotu MAX_MEMORY_PERCENT.
Tento fragment kódu změní MAX_MEMORY_PERCENT fondu zdrojů PoolHk na 70% nainstalované paměti.

Důležitý

Pokud server běží na virtuálním počítači a není vyhrazený, nastavte hodnotu MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT na stejnou hodnotu.
Další informace najdete v tématu Osvědčené postupy s využitím In-Memory OLTP v prostředí virtuálního počítače.

-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor to enabled it
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  

Informace o maximálních hodnotách pro MAX_MEMORY_PERCENT naleznete v části tématu Procento paměti dostupné pro tabulky optimalizované pro paměť a indexy.

Instalace další paměti

V konečném důsledku je nejlepším řešením, pokud je to možné, nainstalovat další fyzickou paměť. Pokud to uděláte, nezapomeňte, že pravděpodobně budete moct zvýšit i hodnotu MAX_MEMORY_PERCENT (viz dílčí téma Změnit MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT ve stávajícím fondu), protože SQL Server pravděpodobně nebude potřebovat více paměti, což vám umožní provádět většinu, pokud ne všechny nově nainstalované paměti dostupné fondu zdrojů.

Důležitý

Pokud server běží na virtuálním počítači a není vyhrazený, nastavte hodnotu MIN_MEMORY_PERCENT a MAX_MEMORY_PERCENT na stejnou hodnotu.
Další informace najdete v tématu Osvědčené postupy s využitím In-Memory OLTP v prostředí virtuálního počítače.

Řešení selhání přidělení stránky kvůli nedostatku paměti, pokud je k dispozici dostatek paměti

Pokud se v protokolu chyb zobrazí chybová zpráva Disallowing page allocations for database '*\<databaseName>*' due to insufficient memory in the resource pool '*\<resourcePoolName>*'. See 'https://go.microsoft.com/fwlink/?LinkId=330673' for more information. a dostupná fyzická paměť je dostatečná pro přidělení stránky, může to být způsobeno deaktivovaným správcem prostředků. Když je správce prostředků deaktivovaný, MEMORYBROKER_FOR_RESERVE vyvolá umělý paměťový tlak.

Pokud chcete tento problém vyřešit, musíte povolit správce prostředků.

Informace o limitech a omezeních a pokyny k povolení správce prostředků pomocí Průzkumníka objektů, vlastností správce prostředků nebo jazyka Transact-SQL najdete v tématu Povolení správce prostředků.

Osvědčené postupy při používání In-Memory OLTP v prostředí virtuálního počítače

Virtualizace serverů vám může pomoct snížit hlavní a provozní náklady NA IT a dosáhnout vyšší efektivity IT díky vylepšenému zřizování aplikací, údržbě, dostupnosti a procesů zálohování/obnovení. Díky nedávným technologickým pokrokům se složité databázové úlohy dají snadněji konsolidovat pomocí virtualizace. Toto téma popisuje osvědčené postupy pro používání SQL Serveru In-Memory OLTP ve virtualizovaném prostředí.

Předběžné přidělení paměti

Pro paměť ve virtualizovaném prostředí jsou zásadní aspekty lepšího výkonu a rozšířené podpory. Musíte být schopni rychle přidělit paměť virtuálním počítačům v závislosti na jejich požadavcích (špičkách i mimo špičku) a zajistit, aby paměť nebyla nevyužitá. Funkce dynamické paměti Hyper-V zvyšuje flexibilitu při přidělování a správě paměti mezi virtuálními počítači spuštěnými na hostiteli.

Při virtualizaci a správě SQL Serveru je potřeba upravit některé osvědčené postupy při virtualizaci databáze s tabulkami optimalizovanými pro paměť. Bez tabulek optimalizovaných pro paměť jsou dva z osvědčených postupů:

  • Pokud používáte minimální paměť serveru, je lepší přiřadit pouze požadovanou velikost paměti, aby dostatek paměti zůstal pro jiné procesy (čímž se zabrání stránkování).
  • Nenastavujte příliš vysokou hodnotu předběžného přidělení paměti. Jinak jiné procesy nemusí v době, kdy vyžadují, získat dostatečnou paměť a to může vést k stránkování paměti.

Pokud postupujete podle výše uvedených postupů pro databázi s tabulkami optimalizovanými pro paměť, může pokus o obnovení a obnovení databáze vést k tomu, že databáze je ve stavu Čeká na obnovení, i když máte dostatek paměti k obnovení databáze. Důvodem je, že při spuštění načítá In-Memory OLTP data do paměti agresivněji než dynamická alokace paměti přiřazuje paměť databázi.

Usnesení

Pokud chcete tento problém zmírnit, předem přidělte databázi dostatek paměti pro obnovení nebo restartování databáze, nikoli minimální hodnotu, která se spoléhá na dynamickou paměť, aby v případě potřeby poskytla další paměť.

Viz také

Správa paměti pro In-Memory OLTP
Monitorování a řešení potíží s využitím paměti
Propojení databáze s tabulkami Memory-Optimized do fondu zdrojů
Průvodce architekturou správy paměti
možnosti konfigurace serveru paměti