Sdílet prostřednictvím


Možnosti konfigurace paměti serveru

platí pro:SQL Server

Využití paměti pro databázový stroj SQL Serveru je vázané na dvojici nastavení konfigurace, minimální paměti serveru (MB) a maximální paměti serveru (MB). V průběhu času a za normálních okolností se SQL Server pokusí o deklaraci paměti až do limitu nastaveného maximální pamětí serveru (MB).

Poznámka:

Indexy columnstore: přehled a In-Memory přehled OLTP a scénáře použití mají vlastní správce paměti, což usnadňuje monitorování využití fondu vyrovnávací paměti. Další informace najdete v tématu sys.dm_os_memory_clerks.

Ve starších verzích SQL Serveru bylo využití paměti prakticky neomezené, což SQL Serveru indikovalo, že má k dispozici veškerou systémovou paměť. Ve všech verzích SQL Serveru se doporučuje nakonfigurovat horní limit pro využití paměti SQL Serveru tak, že nakonfigurujete maximální paměť serveru (MB).

  • Vzhledem k tomu, že SQL Server 2019 (15.x), instalační program SQL na serverech s Windows poskytuje doporučení pro maximální paměť serveru (MB) pro samostatnou instanci SQL Serveru na základě procenta dostupné systémové paměti v době instalace.
  • Kdykoli můžete překonfigurovat hranice paměti (v megabajtech) pro proces SQL Serveru používaný instancí SQL Serveru prostřednictvím minimální paměti serveru (MB) a možností konfigurace maximální paměti serveru (MB).

Poznámka:

Tato příručka odkazuje na instanci SQL Serveru ve Windows. Informace o konfiguraci paměti v Linuxu najdete v tématu Osvědčené postupy a pokyny pro konfiguraci výkonu pro SQL Server v Linuxu a nastavení memory.memorylimitmb.

Doporučení

Výchozí nastavení a minimální povolené hodnoty pro tyto možnosti jsou:

Možnost Výchozí Minimální povolená Doporučeno
minimální serverová paměť (MB) 0 0 0
maximální velikost paměti serveru (MB) 2 147 483 647 megabajtů (MB) 128 MB 75% dostupné systémové paměti, kterou nespotřebovaly jiné procesy, včetně ostatních instancí. Podrobnější doporučení najdete v tématu maximální velikost paměti serveru.

V rámci těchto hranic může SQL Server dynamicky měnit požadavky na paměť na základě dostupných systémových prostředků. Další informace najdete v tématu Správa dynamické paměti.

  • Nastavení příliš vysoké hodnoty maximální paměti serveru (MB) může způsobit, že jedna instance SQL Serveru bude soutěžit o paměť s jinými instancemi SQL Serveru hostovanými na stejném hostiteli.
  • Nastavení maximální paměti serveru (MB) je však příliš nízká, což může způsobit ztrátu výkonu a může způsobit problémy s tlakem paměti a výkonem v instanci SQL Serveru.
  • Nastavení maximální paměti serveru (MB) na minimální hodnotu může dokonce zabránit spuštění SQL Serveru. Pokud po změně této možnosti nemůžete spustit SQL Server, spusťte ji pomocí -f možnosti spuštění a obnovte maximální paměť serveru (MB) na předchozí hodnotu. Pro více informací se podívejte na možnosti spuštění služby databázového stroje .
  • Nedoporučuje se nastavit maximální paměť serveru (MB) a minimální paměť serveru (MB) na stejnou hodnotu nebo téměř stejné hodnoty.

Poznámka:

Možnost maximální paměti serveru omezuje pouze velikost fondu vyrovnávací paměti SQL Serveru. Možnost maximální paměti serveru neomezuje zbývající nevyrezervovanou oblast paměti, kterou SQL Server ponechá pro přidělení dalších komponent, jako jsou rozšířené uložené procedury, objekty COM, nesdílené knihovny DLL a exe.

SQL Server může dynamicky používat paměť. Možnosti paměti však můžete nastavit ručně a omezit množství paměti, ke které má SQL Server přístup. Než nastavíte velikost paměti pro SQL Server, určete příslušné nastavení paměti odečtením celkové fyzické paměti, paměti vyžadované pro operační systém, přidělení paměti, které není řízeno nastavením maximální paměti serveru (MB) a všemi dalšími instancemi SQL Serveru (a jinými systémy, pokud je server domovem jiných aplikací, které spotřebovávají paměť, včetně dalších instancí SQL Serveru). Tento rozdíl je maximální velikost paměti, kterou můžete přiřadit k aktuální instanci SQL Serveru.

Paměť lze nakonfigurovat až do limitu procesního virtuálního adresního prostoru ve všech edicích SQL Serveru. Další informace naleznete v tématu Omezení paměti pro vydání systému Windows a Windows Server.

Minimální paměť serveru

Použijte minimální paměť serveru (MB) k zajištění minimálního množství paměti dostupného správci paměti serveru SQL.

  • SQL Server okamžitě nepřidělí množství paměti zadané v minimální paměti serveru (MB) při spuštění. Jakmile však využití paměti dosáhne této hodnoty kvůli načtení klienta, SQL Server nemůže uvolnit paměť, pokud se nezmenší hodnota minimální paměti serveru (MB). Pokud je například na stejném serveru současně nainstalováno několik instancí SQL Serveru, zvažte nastavení parametru minimální paměti serveru (MB) pro rezervaci paměti pro instanci.

  • Nastavení minimální hodnoty paměti serveru (MB) je nezbytné ve virtualizovaném prostředí, aby se zajistilo, že se zatížení paměti od základního hostitele nepokouší uvolnit paměť z fondu vyrovnávací paměti na hostovaném virtuálním počítači nad rámec toho, co je potřeba k přijatelnému výkonu. V ideálním případě nemusí instance SQL Serveru na virtuálním počítači soutěžit s proaktivními procesy přidělení paměti virtuálního hostitele.

  • SQL Server nezaručuje přidělení množství paměti zadané v minimální paměti serveru (MB). Pokud zatížení serveru nikdy nevyžaduje přidělení množství paměti zadané v minimální paměti serveru (MB), SQL Server bude používat méně paměti.

Maximální velikost paměti serveru

Pomocí maximální paměti serveru (MB) zaručte operační systém a další aplikace, které nemají negativní zatížení paměti pocházející z SQL Serveru.

  • Před nastavením konfigurace maximální paměti serveru (MB) monitorujte celkovou spotřebu paměti serveru hostujícího instanci SQL Serveru během normálního provozu, abyste zjistili dostupnost a požadavky na paměť. Při počáteční konfiguraci nebo v případě, že se v průběhu času neshromažďovalo využití paměti procesu SQL Serveru, použijte následující zobecněný postup konfigurace maximální paměti serveru (MB) pro jednu instanci:
    • Z celkové paměti operačního systému odečtěte ekvivalent možných přidělení paměti vláken SQL Serveru mimo maximální paměť serveru (MB), což je velikost zásobníku1 vynásobená vypočítaným maximálním počtem pracovních vláken2.
    • Potom odečtěte 25% pro ostatní přidělení paměti mimo maximální paměť serveru (MB), jako jsou vyrovnávací paměti zálohování, rozšířené uložené procedury DLL, objekty vytvořené pomocí procedur Automation (sp_OA volání) a přidělení od poskytovatelů propojených serverů. Toto je obecná aproximace a vaše kilometry se můžou lišit.
    • To, co zbývá, by mělo být nastavení maximální paměti serveru (MB) pro nastavení jedné instance.

1 V průvodci architekturou správy paměti najdete informace o velikostech zásobníků vláken na architekturu.

2 Další informace o počítaných výchozích pracovních vláknech pro daný počet spřažených procesorů v aktuálním hostu naleznete v tématu Konfigurace serveru: maximální počet pracovních vláken.

Ruční nastavení možností

Možnosti serveru min. paměť serveru (MB) a maximální paměť serveru (MB) je možné nastavit tak, aby byly rozloženy do rozsahu hodnot paměti. Tato metoda je užitečná pro správce systému nebo databáze ke konfiguraci instance SQL Serveru s požadavky na paměť jiných aplikací nebo jiných instancí SQL Serveru, které běží na stejném hostiteli.

Použijte Transact-SQL

Možnosti minimální paměti serveru (MB) a maximální paměti serveru (MB) jsou pokročilé možnosti. Při použití sp_configure systémové uložené procedury ke změně těchto nastavení je můžete změnit pouze v případě, že je možnost zobrazit pokročilé možnosti nastavena na hodnotu 1. Tato nastavení se projeví okamžitě bez restartování serveru. Další informace naleznete v tématu sp_configure.

Následující příklad nastaví možnost maximální paměti serveru (MB) na 12 288 MB nebo 12 GB. Ačkoli sp_configure určuje název možnosti jako max server memory (MB), můžete vynechat (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO

Následující dotaz vrátí informace o aktuálně nakonfigurovaných hodnotách a aktuálně používané hodnotě. Tento dotaz vrátí výsledky bez ohledu na to, jestli sp_configure je povolená možnost Zobrazit pokročilé možnosti.

SELECT [name],
       [value],
       [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
      OR [name] = 'min server memory (MB)';

Použití aplikace SQL Server Management Studio

Pomocí minimální paměti serveru (MB) a maximální paměti serveru (MB) překonfigurujte velikost paměti (v megabajtech) spravovanou správcem paměti SQL Serveru pro instanci SQL Serveru.

  1. V Průzkumníku objektů klikněte pravým tlačítkem na server a vyberte Vlastnosti.

  2. Vyberte stránku Paměť v okně Vlastnosti serveru . Zobrazí se aktuální hodnoty minimální paměti serveru a maximální paměti serveru .

  3. V možnostech paměti serveru zadejte požadovaná čísla pro minimální paměť serveru a maximální paměť serveru. Doporučení najdete v části Minimální paměť serveru (MB) a maximální paměť serveru (MB) v tomto článku.

Následující snímek obrazovky ukazuje všechny tři kroky:

Snímek obrazovky s možnostmi konfigurace paměti v nástroji SSMS

Uzamknout stránky v paměti (LPIM)

Aplikace založené na Windows můžou pomocí rozhraní API AWE (Windows Address Windowing Extensions) přidělovat a mapovat fyzickou paměť do adresního prostoru procesu. Zásady LPIM systému Windows určují, které účty mají přístup k rozhraní API, aby data zůstala ve fyzické paměti, což systému brání stránkování dat do virtuální paměti na disku. Paměť přidělená pomocí AWE zůstává uzamčena, dokud ji aplikace explicitně neuvolní nebo se neukončí. Použití rozhraní API AWE pro správu paměti v 64bitovém SQL Serveru se také často označuje jako uzamčené stránky. Uzamčení stránek v paměti může udržet odezvu serveru při stránkování paměti na disk. Možnost Zamknout stránky v paměti je povolena v instancích edice SQL Server Standard a vyšší, pokud byl účtu s oprávněními ke spuštění sqlservr.exe uděleno uživatelské právo Windows Lock pages in memory (LPIM).

Chcete-li zakázat možnost Uzamknout stránky v paměti pro SQL Server, odeberte uživatelské právo Uzamknout stránky v paměti účtu s oprávněními ke spuštění sqlservr.exe (spouštěcí účet SQL Serveru).

Použití LPIM nemá vliv na správu dynamické paměti SQL Serveru a umožňuje rozšířit nebo zmenšit paměť na žádost jiných správců paměti. Při použití uživatelského práva Zamykání stránek v paměti důrazně doporučujeme nastavit horní limit pro maximální paměť serveru (MB) Další informace najdete v tématu maximální paměť serveru (MB).</a0>

Měl by být použit LPIM, pokud existují známky, že sqlservr proces je odkládán na disk. V tomto případě bude v protokolu s chybami hlášena chyba 17890, která vypadá jako následující příklad:

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

Použití LPIM s nesprávně nakonfigurovaným nastavením maximální paměti serveru (MB), které neodpovídá jiným příjemcům paměti v systému, může způsobit nestabilitu v závislosti na množství paměti vyžadované jinými procesy nebo požadavky na paměť SQL Serveru mimo rozsah maximální paměti serveru (MB). Další informace najdete v tématu maximální velikost paměti serveru. Pokud je udělena oprávnění k uzamčení stránek v paměti (LPIM) (v 32bitových nebo 64bitových systémech), důrazně doporučujeme nastavit maximální paměť serveru (MB) na konkrétní hodnotu, a ne ponechat výchozí hodnotu 2 147 483 647 megabajtů (MB).

Poznámka:

Počínaje SQL Serverem 2012 (11.x) již není potřeba příznak trasování 845 k použití uzamčených stránek ve Standard Edition.

Povolte zamknutí stránek v paměti

Po zvážení předchozích informací povolte možnost Zamknout stránky v paměti udělením oprávnění účtu služby pro instanci SQL Serveru. Podrobnosti naleznete v části Enable the Lock pages in memory Option (Windows).

Pokud chcete určit účet služby pro instanci SQL Serveru, projděte si SQL Server Configuration Manager nebo spusťte dotaz na service_account z sys.dm_server_services. Další informace naleznete v tématu sys.dm_server_services.

Zobrazit stav uzamčení stránek v paměti

Chcete-li zjistit, zda je privilegium uzamčení stránek v paměti uděleno účtu služby pro instanci SQL Serveru, použijte následující dotaz. Tento dotaz je podporován v SQL Serveru 2016 (13.x) SP1 a novějším.

SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

Následující hodnoty sql_memory_model_desc označují stav LPIM:

  • CONVENTIONAL. Není uděleno oprávnění k uzamčení stránek v paměti.
  • LOCK_PAGES. Oprávnění k uzamčení stránek v paměti je uděleno.
  • LARGE_PAGES. Oprávnění uzamknout stránky v paměti je uděleno v podnikovém režimu s povoleným příznakem trasování 834. Jedná se o pokročilou konfiguraci, která se nedoporučuje pro většinu prostředí. Další informace a důležité upozornění najdete v tématu Příznak trasování 834.

Pomocí následujících metod určete, jestli instance SYSTÉMU SQL Server používá uzamčené stránky:

  • Výstup následujícího dotazu Transact-SQL označuje nenulové hodnoty pro locked_page_allocations_kb:

    SELECT osn.node_id,
           osn.memory_node_id,
           osn.node_state_desc,
           omn.locked_page_allocations_kb
    FROM sys.dm_os_memory_nodes AS omn
         INNER JOIN sys.dm_os_nodes AS osn
             ON (omn.memory_node_id = osn.memory_node_id)
    WHERE osn.node_state_desc <> 'ONLINE DAC';
    
  • Aktuální protokol chyb SQL Serveru hlásí zprávu Using locked pages in the memory manager během spuštění serveru.

  • Část Správce paměti výstupu DBCC MEMORYSTATUS zobrazuje nenulovou hodnotu položky AWE Allocated .

Více instancí SQL Serveru

Při spouštění více instancí databázového stroje existují různé přístupy, které můžete použít ke správě paměti:

  • K řízení využití paměti použijte maximální paměť serveru (MB) v každé instanci, jak je popsáno výše. Nastavte maximální nastavení pro každou instanci a dávejte pozor, aby celkový limit nebyl větší než celková fyzická paměť na vašem počítači. Možná budete chtít přidělit každé instanci paměť úměrnou očekávané zátěži nebo velikosti databáze. Tento přístup má výhodu, že když se spustí nové procesy nebo instance, bude pro ně okamžitě k dispozici volná paměť. Nevýhodou je, že pokud nespouštět všechny instance, nebude moct žádná spuštěná instance využívat zbývající volnou paměť.

  • K řízení využití paměti použijte minimální paměť serveru (MB) v každé instanci, jak je popsáno výše. Vytvořte minimální nastavení pro každou instanci, aby součet těchto minimálních hodnot byl 1 až 2 GB menší než celková fyzická paměť na vašem počítači. Opět můžete stanovit tato minimální množství úměrně očekávanému zatížení této instance. Tento přístup má výhodu, že pokud ne všechny instance běží současně, ty spuštěné můžou použít zbývající volnou paměť. Tento přístup je užitečný také v případě, že na počítači existuje jiný proces náročný na paměť, protože by se zajistilo, že SQL Server alespoň získá přiměřené množství paměti. Nevýhodou je, že při spuštění nové instance (nebo jakéhokoli jiného procesu) může trvat nějakou dobu, než spuštěné instance uvolní paměť, zejména pokud musí zapisovat upravené stránky zpět do svých databází.

  • Maximální využití paměti serveru (MB) i minimální paměť serveru (MB) v každé instanci můžete použít k řízení využití paměti, sledování a ladění maximálního využití a minimální ochrany paměti v rámci široké škály potenciálních úrovní využití paměti.

  • Nedělejte nic (nedoporučuje se). První instance prezentované úlohou mají tendenci přidělovat veškerou paměť. Nečinné instance nebo instance spuštěné později můžou skončit jen s minimální dostupnou pamětí. SQL Server se nepokouší vyrovnávat využití paměti napříč instancemi. Všechny instance však reagují na signály oznámení paměti systému Windows, aby upravily velikost svých paměťových nároků. Systém Windows nerovná paměť mezi aplikacemi pomocí rozhraní API pro oznámení paměti. Poskytuje pouze globální zpětnou vazbu ohledně dostupnosti paměti v systému.

Tato nastavení můžete změnit bez restartování instancí, abyste mohli snadno experimentovat a najít nejlepší nastavení pro váš vzor použití.

Příklady

A. Nastavení možnosti maximální paměti serveru na 4 GB

Následující příklad nastaví možnost maximální paměti serveru (MB) na 4096 MB nebo 4 GB. Ačkoli sp_configure určuje název možnosti jako max server memory (MB), můžete vynechat (MB).

EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO

EXECUTE sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

Tím se vypíše výrok podobný Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. Nový limit paměti se projeví neprodleně po provedení RECONFIGURE. Další informace naleznete v tématu sp_configure.

B. Určení aktuálního přidělení paměti

Následující dotaz vrátí informace o aktuálně přidělené paměti.

SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
       large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
       locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
       virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
       virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
       virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
       page_fault_count AS sql_page_fault_count,
       memory_utilization_percentage AS sql_memory_utilization_percentage,
       process_physical_memory_low AS sql_process_physical_memory_low,
       process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

C. Zobrazení hodnoty max server memory (MB)

Následující dotaz vrátí informace o aktuálně nakonfigurované hodnotě a používané hodnotě. Tento dotaz vrátí výsledky bez ohledu na to, jestli sp_configure je povolená možnost Zobrazit pokročilé možnosti.

SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';