Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Podrobnosti
| Attribute | Value |
|---|---|
| Název produktu | SQL Server |
| ID události | 17890 |
| Zdroj události | MSSQLSERVER |
| Součást | SQLEngine |
| Symbolický název | SRV_WS_TRIMMED |
| Text zprávy | Významná část paměti procesu SQL Serveru byla odstraněna z paměti. To může vést ke snížení výkonu. Doba trvání: %d sekund. Pracovní sada (KB): %I64d, potvrzeno (KB): %I64d, využití paměti: %d%%. |
Explanation
Můžete narazit na následující chybovou zprávu v logu chyb SQL Server nebo v logu událostí aplikace Windows.
Významná část paměti procesu SQL Serveru byla odstraněna z paměti. To může vést ke snížení výkonu. Doba trvání: 0 sekund. Pracovní sada (KB): 3383250, závazek (KB): 9112480, využití paměti: 37%.
Můžete také zaznamenat náhlé zhoršení výkonu při provádění dotazů a všech ostatních operací na SQL Server.
Cause
SQL Server sleduje různé informace týkající se pamětí o procesu SQL Server. V tomto případě zjistil, že pracovní množina procesu je menší než 50% zavázané paměti procesu. V důsledku toho je toto varování vytištěno. Běžné příčiny tohoto varování jsou:
- Operační systém vyřadí velké části SQL Server uložené paměti do stránkovacího souboru.
- To může být způsobeno náhlým zvýšeným požadavkem na paměť ze strany jiných aplikací nebo potřeb operačního systému.
- To se může stát i tehdy, když některé ovladače zařízení požadují souvislé alokace paměti pro své potřeby.
Akce uživatele
Můžete zabránit tomu, aby operační systém Windows vytáhl paměť buffer poolu procesu SQL Server tím, že uzamknete paměť přidělenou bufferu do fyzické paměti. Paměť uzamknete přiřazením uživatelského práva Lock pages in memory uživateli k uživatelskému účtu, který slouží jako startovací účet služby SQL Server. Ale než toto řešení implementujete, projděte si sekce Co způsobuje, že se paměť SQL Server vytrhává a Důležité věci před přiřazením uživatelského práva "Zamknout stránky v paměti" pro instanci SQL Server
Note
Použití zámkových stránek v paměti zajistí, že paměť spravovaná SQL Server nebude stránkována ven. Nicméně vláknové zásobníky, EXE a jakékoli DLL obrazy, heap paměť a CLR paměť mohou být stále vystránkovány operačním systémem.
Od SQL Server 2008 SP1 Cumulative Update 2 mohou jak edice SQL Server Standard, tak Enterprise používat uživatelské právo na uzamčení stránek v paměti. Pro více informací o podpoře zamčených stránek navštivte KB970070 - Podpora zamčených stránek na systémech SQL Server Standard Edition (64bit).
Pro přiřazení stránek Lock v paměťovém právu postupujte podle těchto kroků:
- Klikněte na Start, klikněte na Spustit, napište gpedit.msc a pak OK.
- Poznámka: Objeví se dialogové okno Skupinová politika.
- Rozbalte Konfiguraci počítače a poté Nastavení Windows.
- Rozšiřte Nastavení bezpečnosti a poté rozšířte Lokální politiky.
- Klikněte na Přiřazení uživatelských práv a poté dvakrát klikněte na Zamknout stránky v paměti.
- V dialogovém okně Nastavení lokální bezpečnostní politiky klikněte na Přidat uživatele nebo Skupinu.
- V dialogovém okně Vybrat uživatele nebo skupiny přidejte účet, který má oprávnění spustit Sqlservr.exe soubor, a poté klikněte na OK.
- Zavřete dialogové okno Skupinová politika .
- Restartujte službu SQL Server.
Po přiřazení stránek zámku v paměťi uživatelským právem a restartu služby SQL Server operační systém Windows již nevyřazuje paměť bufferu v rámci procesu SQL Server. Nicméně operační systém Windows může stále stránkovat paměť nebuffer poolu v rámci procesu SQL Server.
Můžete ověřit, že uživatelské právo je použito instancí SQL Server tím, že se ujistite, že následující zpráva je zapsána v SQL Server Error Log při startu: "Používání zamčených stránek pro buffer pool"
Tato zpráva se vztahuje pouze na SQL Server. Pro více informací o této zprávě v ERRORLOGu navštivte následující: Musím v lokálním systému přiřadit zámkové stránky pro paměťové oprávnění
Když operační systém Windows vyřadí paměť z nebuffer poolu, můžete stále narazit na problémy s výkonem. Chybové zprávy zmíněné v sekci "Vysvětlení" však nejsou zaznamenány v logu chyb SQL Server.
Co způsobuje, že je paměť SQL Server vytrhána
Existují tři hlavní kategorie problémů, které mohou tento problém způsobit:
- Application-Related Problémy: Všechny aplikace dohromady vyčerpaly dostupnou fyzickou paměť a operační systém musí uvolnit část paměti pro nové žádosti o zdroje aplikací. Obvykle je zde přístup zjistit, které aplikace vyčerpávají paměť, a podniknout potřebné kroky k vyvážení paměti mezi nimi, aniž by došlo k vyčerpání RAM.
- Problémy s ovladačem zařízení: Ovladače zařízení mohou způsobit stránkování pracovních sad všech procesů, pokud ovladač nesprávně volá funkci alokace paměti.
- Problémy s operačním systémem
Níže najdete informace o každé z těchto kategorií
Application-Related problémy: Aplikace dohromady mohou spotřebovávat veškerou RAM systému. Pokud jsou podávány nové požadavky na paměť, OS se je snaží uspokojit a pokud není volná paměť, ořízne pracovní sadu běžících aplikací, aby uspokojil požadavky na paměť. V takových případech můžete pozorovat, že pracovní množina většiny, ne-li všech aplikací, výrazně klesá. Pro pozorování tohoto zjištění shromáždte následující čítač Sledování výkonu pro všechny aplikace v systému:
- Objekt výkonu: Proces
- Protihráč: Pracovní sada
Také sledujte následující čítač, abyste zjistili, kolik fyzické paměti je v systému k dispozici.
- Objekt výkonu: Paměť
- Počítadlo: Dostupná paměť (MB)
Typické chování, které můžete pozorovat, je snížení dostupné paměti téměř na 0 MB a zároveň náhlý pokles počtu pracovních setů u většiny (všech) procesů v systému. Pokud takové chování pozorujete, možná budete muset podniknout kroky ke snížení využití paměti v systému, což zahrnuje například snížení maximální kapacity serverové paměti pro SQL Server.
Aplikace mohou také příliš využívat systémovou cache a mohou způsobit výrazný růst systémové cache. Aby systém reagoval na růst systémové cache, stránkuje pracovní sadu procesu SQL Server nebo jiných aplikací. Pokud se s tímto problémem setkáte, můžete v aplikaci použít některé funkce správy paměti. Tyto funkce řídí systémový cache prostor, který mohou I/O operace souborů v aplikaci využívat. Například můžete použít funkce SetSystemFileCacheSize a GetSystemFileCacheSize k ovládání prostoru v cache systému, který mohou používat operace souborových I/O.
Objekt Memory performance můžete použít k zobrazení hodnot různých čítačů v tomto objektu a zjistit, zda pracovní sada systémové cache využívá příliš mnoho paměti. Například můžete zobrazit čítače Cache Bytes a System Cache Resident Bytes. Pro více informací o tomto tématu viz:
- Příliš mnoho cache
- Microsoft Windows Dynamická cache služba
- Problémy s výkonem v aplikacích a službách zažíváte tehdy, když systémová cache souborů spotřebovává většinu fyzické RAM
Můžete si stáhnout a nasadit "Microsoft Windows Dynamic Cache Service" pro řízení paměti, kterou spotřebovává systémová cache.
Problémy s ovladačem zařízení: Pokud ovladač zařízení používá tuto
MmAllocateContiguousMemoryfunkci a pokud nastaví hodnotu parametru HighestAcceptableAddress na méně než 4 gigabajty (GB), operační systém Windows může stránkovat pracovní sadu procesů v systému včetně procesu SQL Server. Pro vyřešení tohoto problému kontaktujte výrobce ovladače zařízení kvůli aktualizacím ovladačů.Když se ovladač zařízení pokusí přidělit paměť, operační systém Windows může stránkovat pracovní sadu jiných aplikací. Tato hotfix pro Windows vám umožní pomocí sledování událostí najít ovladač zařízení, který způsobuje problém. Pro více informací o konkrétním ovladači, který způsobuje chování ořezávání pracovní množiny, viz Identifikace ovladačů, které přidělují souvislou paměť.
Problémy operačního systému: Pro vyřešení známých problémů, které způsobují, že operační systém Windows stránkuje pracovní sadu procesu SQL Server, použijte hotfixy popsané v následujících článcích znalostní báze Microsoft Knowledge Base.
Note
Hotfixy se sčítají. Pozdější verze hotfixu obsahuje dřívější verze této hotfixy.
Sada SQL Server může být ořezána, když systém používá některé pokročilé TCP funkce. Pro více informací viz Jak diagnostikovat pokročilé funkce výkonu sítě, jako jsou RSS a NetDMA.
Pokud spouštíte SQL Server na Windows Server 2008, musíte aplikovat opravy na známé problémy, které mohou vést k ořezávání pracovních sad nebo zbytečně nadměrné spotřebě paměti jinými komponentami operačního systému. Pro více informací si přečtěte následující články Proces generování zpráv může přestat reagovat, když Perfmon.exe spustíte pomocí šablony služba Active Directory Diagnostics a vygenerujete report na doménovém řadiči založeném na Windows Server 2008.
Pokud používáte SQL Server na Windows Serve 2008 R2, musíte aplikovat opravy na známé problémy, které mohou vést k pracovnímu ořezávání sad. Pro více informací si přečtěte následující články:
- Počítač běžící na Windows 7 nebo Windows Server 2008 R2 se stává nereagujícím při spuštění velké aplikace
- Špatný výkon nastává na počítači s procesory založenými na NUMA a běžícím na Windows Server 2008 R2 nebo Windows 7, pokud vlákno vyžaduje velké množství paměti v rámci prvních 4 GB paměti
- Počítač občas funguje špatně nebo přestane reagovat, když je v Windows Server 2008 R2 použit ovladač Storport
Důležité věci před přiřazením uživatelského práva "Zamknout stránky v paměti"
Měli byste ještě zvážit, než přiřadíte uživatelská práva na zámek stránek v paměti. Pokud tohoto uživatele přiřadíte přímo na nesprávně nakonfigurované systémy, může se systém stát nestabilním nebo dojít ke snížení výkonu celého systému. Navíc může být v záznamu událostí zaznamenáno ID události 333.
Pokud kontaktujete zákaznickou podporu Microsoft (CSS) kvůli těmto problémům, mohou vás CSS inženýři požádat o odebrání uživatelského práva pro uživatelský účet, který je používán jako startovací účet služby SQL Server. Tento krok může být nezbytný pro získání důležitých výkonových dat, která mohou CSS inženýři využít pro potřebnou konfiguraci různých možností pro SQL Server a další aplikace běžící na systému. Poté, co CSS inženýři shromáždí data o výkonu, můžete uživatele Lock pages in memory přiřadit přímo ke startovacímu účtu služby SQL Server.
Než přiřadíte uživatelské právo Lock pages v paměti, ujistěte se, že zaznamenáte log Sledování výkonu, abyste určili požadavky na paměť různých aplikací a služeb nainstalovaných na systému. Tyto aplikace zahrnují také SQL Server. Pro určení požadavků na paměť shromáždte následující základní informace:
Ujistěte se, že jste správně nastavili možnost maximální serverové paměti a minimální serverovou paměť. Tyto možnosti odrážejí pouze požadavky na paměť bufferového poolu procesu SQL Server. Tyto možnosti nezahrnují paměť přidělenou pro jiné komponenty v procesu SQL Server. Tyto složky zahrnují následující:
- Vlákna SQL Server worker
- Různé DLL a komponenty, které proces SQL Server načítá v adresním prostoru procesu SQL Server
- Operace zálohování a obnovy
DLL a komponenty zahrnují různé poskytovatele OLE DB, rozšířené uložené procedury Microsoft COM objekty používané pro sp_OACreate uloženou proceduru, propojené servery a SQL Server CLR. Paměť alokovaná pro tyto komponenty spadá do oblasti nebufferového poolu adresního prostoru procesu SQL Server. Abychom ideálně určili maximální množství paměti, kterou může celý proces SQL Server využít, musíte odečíst paměť přidělenou komponentám, které nevyužívají bufferový pool, od celkové paměti, kterou chcete, aby proces SQL Server využil. Pak můžete použít hodnotu zbytku k nastavení možnosti maximální paměť serveru. Než nastavíte možnost maximální serverové paměti a minimální serverové paměť, měli byste si pečlivě prostudovat téma "Ruční nastavení paměťových možností" v SQL Server Books Online.
Určte paměťové požadavky ostatních aplikací a komponent operačního systému Windows. Aplikace mohou zahrnovat i další komponenty SQL Server, například SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, Analytické služby SQL Serveru, Služby Integrace SQL Serveru a SQL Server plnotextové vyhledávání. Aplikace, které provádějí zálohovací operace a kopírování souborů, mohou používat mnoho pamětí. Zvažte operace jako hromadné kopírování a Snapshot Agent, které generují IO souborů. Při určování hodnoty maximální možnosti serverové paměti a minimální možnosti serverové paměti musíte zohlednit paměťové požadavky všech těchto aplikací. Můžete použít čítač Private Bytes a počítadlo Working Set pod objektem Process pro každý proces k určení požadavku na paměť pro konkrétní proces.
Výchozí nastavení jsou uživatelská práva Lock pages in memory již přiřazena k vestavěnému účtu Local System. Pro více informací navštivte následující webové stránky Microsoft: Musím přiřadit privilegium Lock pages v paměti pro lokální systém?
Pokud používáte uživatelský účet Windows globálně pro všechny procesy SQL Server v doméně, určete uživatelská práva, která jsou přiřazena, pomocí konfigurace skupinových politik. 32bitový proces SQL Server může tento účet používat jako startovací účet. Tento účet však vyžaduje uživatelské právo Zamknout stránky v paměti, aby byla funkce (AWE) povolena
Address Windowing Extensions. Pro více informací viz téma "Poskytování maximálního množství paměti pro SQL Server" v SQL Server Books Online.Než nakonfigurujete možnost maximální serverové paměťi a minimální serverové paměť pro více instancí SQL Server, zvažte požadavky na paměť nebufferového poolu pro každou instanci SQL Server. Poté tyto možnosti nakonfigurujte pro každou instanci SQL Server.
Ideálně tyto základní informace sbíráte během špičkových zátěží. Proto můžete určit požadavky na paměť pro různé aplikace a komponenty, aby podpořily špičkové zatížení. Požadavky na paměť se liší mezi jednotlivými systémy, v závislosti na aktivitách a aplikacích, které na systému běží. Můžete dotazovat informace poskytované v dynamickém správním pohledu sys.dm_os_process_memory, abyste zjistili, zda systém netrpí nedostatkem paměti. Pro více informací viz sys.dm_os_process_memory (Transact-SQL).
Vylepšení přidána ve verzích Windows Server 2008 a R2
Windows Server 2008 a Windows Server 2008 R2 zlepšují mechanismus souvislé alokace paměti. Toto zlepšení umožňuje Windows Server 2008 a Windows Server 2008 R2 do určité míry snížit účinky stránkování pracovní sady aplikací při příchodu nových požadavků na paměť.
Následuje vysvětlení zlepšení z Microsoft whitepaperu "Advances in Memory Management in Windows":
Ve Windows Server 2008 je alokace fyzicky souvislé paměti výrazně vylepšena. Požadavky na přidělení souvislé paměti mají mnohem větší šanci na úspěch, protože správce paměti nyní dynamicky nahrazuje stránky, obvykle bez ořezávání pracovní sady nebo provádění I/O operací. Kromě toho je nyní mnoho dalších typů stránek – například zásobníky jádra a metadat souborových systémů – nyní kandidáty na nahrazení. V důsledku toho je obecně v daném okamžiku k dispozici více souvislých pamětí. Navíc jsou náklady na získání takových alokací výrazně nižší.
Pro více informací viz SQL Server Working Set Trim Problems.
Produkty třetích stran, které tento článek popisuje, jsou vyráběny společnostmi, které jsou nezávislé na Microsoftu. Společnost Microsoft neposkytuje žádnou záruku, předpokládanou nebo jinou záruku týkající se výkonu nebo spolehlivosti těchto produktů.