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ázáno dvojicí nastavení min server memory (MB) konfigurace a max server memory (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 parametrem max server memory (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 konfigurací max server memory (MB).

  • Vzhledem k tomu, že SQL Server 2019 (15.x), instalační program SQL na serverech s Windows poskytuje doporučení pro max server memory (MB) 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 min server memory (MB) možností konfigurace.max server memory (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
min server memory (MB) 0 0 0
max server memory (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í max server memory (MB) příliš vysoké hodnoty 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í max server memory (MB) příliš nízké je ale příležitostí ke ztrátě výkonu a mohlo by způsobit problémy s tlakem paměti a výkonem v instanci SQL Serveru.
  • Nastavení max server memory (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 max server memory (MB) 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 nastavovat max server memory (MB) a min server memory (MB) být stejnou hodnotou nebo blízko stejných hodnot.

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žadovanou pro operační systém, přidělení paměti neřízených max server memory (MB) nastavením a všemi dalšími instancemi SYSTÉMU SQL Server (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

Slouží min server memory (MB) k zajištění minimálního množství paměti dostupné správci paměti SYSTÉMU SQL Server.

  • SQL Server okamžitě nepřidělí množství paměti zadané při min server memory (MB) 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 hodnota min server memory (MB) nezmenší. Pokud je například na stejném serveru současně nainstalováno několik instancí SQL Serveru, zvažte nastavení parametru min server memory (MB) pro rezervaci paměti pro instanci.

  • min server memory (MB) Nastavení hodnoty je nezbytné ve virtualizovaném prostředí, aby se zajistilo, že zatížení paměti od základního hostitele se nepokouší uvolnit paměť z fondu vyrovnávací paměti na virtuálním počítači hosta 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 není zaručeno přidělení množství paměti zadané v min server memory (MB). Pokud zatížení serveru nikdy nevyžaduje přidělení množství paměti zadané v min server memory (MB), SQL Server bude používat méně paměti.

Maximální velikost paměti serveru

Slouží max server memory (MB) k zajištění, že operační systém a další aplikace nemají negativní zatížení paměti pocházející z SQL Serveru.

  • Před nastavením max server memory (MB) konfigurace monitorujte celkovou spotřebu paměti serveru hostujícího instanci SQL Serveru během normálního provozu a určete dostupnost paměti a požadavky. 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ý doporučený postup konfigurace max server memory (MB) pro jednu instanci:
    • Z celkové paměti operačního systému odečtěte ekvivalent potenciálních přidělení paměti vláken SQL Serveru mimo max server memory (MB) řízení, 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 max server memory (MB) řízení, 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.
    • Co zbývá, by mělo být max server memory (MB) nastavení 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 server memory (MB) a max server memory (MB) lze je 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

min server memory (MB) A max server memory (MB) možnosti jsou pokročilé. 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í max server memory (MB) možnost 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

Použijte min server memory (MB) a max server memory (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í zamknout stránky v paměti práva uživatele je důrazně doporučeno nastavit horní limit pro max server memory (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 max server memory (MB) nastavením, 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 max server memory (MB). Další informace najdete v tématu maximální velikost paměti serveru. Pokud je udělena oprávnění Uzamknout stránky v paměti (LPIM) (v 32bitových nebo 64bitových systémech), důrazně doporučujeme nastavit max server memory (MB) konkrétní hodnotu, a ne ponechat výchozí hodnotu 2 147 483 647 megabajtů (MB).

Poznámka:

Počínaje SQL Serverem 2012 (11.x) není příznak trasování 845 nutný pro použití uzamčených stránek edice Standard.

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í ke svázání stránek v paměti je uděleno v režimu Enterprise 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 příznaku 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:

  • V každé instanci se používá max server memory (MB) k řízení využití paměti, jak je podrobně popsáno dříve. 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ěť.

  • V každé instanci se používá min server memory (MB) k řízení využití paměti, jak je podrobně popsáno dříve. 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í.

  • max server memory (MB) min server memory (MB) V každé instanci můžete řídit využití paměti, sledovat a ladit maximální využití jednotlivých instancí a minimální ochranu paměti v široké škále 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í max server memory (MB) možnost 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)';