MSSQLSERVER_8645
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Podrobnosti
Vlastnost | Hodnota |
---|---|
Název produktu | SQL Server |
ID události | 8645 |
Zdroj událostí | MSSQLSERVER |
Součást | SQLEngine |
Symbolický název | MEMTIMEDOUT_ERR |
Text zprávy | Při čekání na spuštění dotazu ve fondu zdrojů%ls(%ld) došlo k vypršení časového limitu. Spusťte dotaz znovu. |
Vysvětlení
Tato chyba se vyvolá, pokud požadavek SQL Serveru čekal na udělení paměti spouštění dotazů (QE) po delší dobu a paměť nebyla k dispozici. Paměť spouštění dotazů se primárně používá pro operace řazení, operace hash, operace hromadného kopírování a vytváření indexů a populaci. Dotaz, který provede jednu z těchto operací, vyžaduje udělení paměti. Pokud není k dispozici žádná paměť, dotaz se nastaví tak, aby čekal na RESOURCE_SEMAPHORE , dokud nebude k dispozici paměť.
Pokud paměť není dostupná po čekání na dobu časového limitu dynamicky určená náklady na dotazy podle odhadu optimalizátoru dotazů, SQL Server dotaz ukončí s chybou 8645 A timeout occurred while waiting for memory resources to execute the query in the resource pool 'default'.
Hodnota časového limitu se mírně liší mezi verzemi SQL Serveru, ale má maximální hodnotu časového limitu čekání 24 hodin. Hodnotu časového limitu nastavenou na úrovni serveru můžete zobrazit v timeout_sec
sys.dm_exec_query_memory_grants.
Podrobné vysvětlení s postupem řešení potíží najdete v tématu Pomalé problémy s výkonem nebo nedostatkem paměti způsobené přidělením paměti na SQL Serveru.
Příčina
Tato chyba se může zobrazit ve vztahu k grantům paměti a prodlouženým čekáním na zpřístupnění paměti. Když se dotaz dokončí, obvykle uvolní paměť spouštění, která používá. Proto pokud se zobrazí tato chyba, znamená to, že časový limit dotazu čekal na dokončení jiných požadavků po uplynutí časového limitu. Může existovat jen jeden požadavek, který spotřeboval veškerou dostupnou paměť QE nebo může existovat mnoho požadavků a zkombinování, jejich přidělení paměti vyčerpalo paměť QE. Pokud máte v úloze takové dlouhotrvající požadavky, musíte přijmout opatření ke zlepšení doby trvání provádění a snížení množství paměti QE, kterou používají.
Akce uživatele
Pokud nepoužíváte Správce prostředků k omezení fondu paměti pro určité úlohy, můžete ověřit celkový stav serveru a úlohu. Pokud používáte Správce prostředků, zkontrolujte nastavení fondu prostředků nebo skupiny úloh.
Následující seznam shrnuje kroky popsané v výše uvedeném článku. Tyto kroky vám můžou pomoct snížit nebo odstranit chyby paměti QE:
Určete, které požadavky na SQL Serveru představují velké granty paměti nebo příjemce paměti QE. Další informace naleznete v tématu Identifikace čekání na paměť spouštění dotazů.
Přepište dotazy, abyste minimalizovali operace řazení a hash nebo se jim vyhnuli.
Aktualizujte statistiky a pravidelně je aktualizujte, abyste zajistili, že SQL Server správně odhaduje přidělení paměti.
Vytvořte vhodné indexy pro zjištěné dotazy nebo dotazy. Indexy mohou snížit velký počet zpracovaných řádků, a tím změnit algoritmy JOIN a snížit velikost grantů nebo je zcela eliminovat.
Pokud je to možné, použijte v dotazech nápovědu OPTION (min_grant_percent = XX, max_grant_percent = XX).
Pomocí Správce prostředků omezte účinek využití paměti QE pouze na určitou úlohu.
SQL Server 2017 a 2019 používají adaptivní zpracování dotazů, což umožňuje mechanismu udělení zpětné vazby paměti dynamicky upravovat velikost přidělení paměti za běhu. Tato funkce může zabránit problémům s udělením paměti na prvním místě.
Zvyšte paměť SQL Serveru nebo upravte stávající nastavení.
Zkontrolujte následující parametry konfigurace paměti SQL Serveru:
- maximální velikost paměti serveru – v případě potřeby zvyšte
- min serverová paměť
- minimální paměť na dotaz
Všimněte si neobvyklých nastavení. Opravte je podle potřeby. Účet pro zvýšené požadavky na paměť pro SQL Server. Výchozí a doporučená nastavení jsou uvedená v možnostech konfigurace paměti serveru .
Zvyšte paměť na úrovni operačního systému (fyzická nebo virtuální paměť RAM).
Ověřte, zda jiné aplikace nebo služby využívají paměť na tomto serveru. Překonfigurujte méně důležité aplikace nebo služby tak, aby spotřebovaly méně paměti, nebo je přesunuly na samostatný server. Tato akce může odebrat tlak na externí paměť.
Spuštěním následujících příkazů DBCC uvolněte několik mezipamětí paměti SQL Serveru – dočasná míra.
- DBCC FREESYSTEMCACHE
- DBCC FREESESSIONCACHE
- DBCC FREEPROCCACHE