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
Azure SQL Database
Spravovaná instance
Azure SQLPdW (Analytics Platform System)
Tato optimize for ad hoc workloads možnost se používá ke zlepšení efektivity mezipaměti plánu pro úlohy, které obsahují mnoho dávek ad hoc pro jedno použití. Pokud je tato možnost nastavená na 1, databázový stroj ukládá malou zkompilovanou proceduru plánu do mezipaměti plánu při prvním kompilaci dávky místo úplného zkompilovaného plánu. Tato možnost může pomoct zmírnit zatížení paměti tím, že neumožní, aby se mezipaměť plánu naplnila kompilovanými plány, které se znovu nepoužívají. Povolení této možnosti ale může ovlivnit vaši schopnost řešit potíže s plány s jedním použitím.
Zkompilovaný zástupný kód plánu umožňuje databázovému stroji rozpoznat, že tato dávka ad hoc byla dříve zkompilována a ukládá pouze zkompilovanou proceduru plánu. Když se tato dávka vyvolá (zkompiluje nebo spustí) znovu, databázový stroj zkompiluje dávku, odebere z mezipaměti plánu zkompilovaný zástupný kód plánu a přidá úplný zkompilovaný plán do mezipaměti plánu.
Kompilované zástupné procedury plánu najdete tak, že ve sloupci vyhledáte sys.dm_exec_cached_plans zobrazení katalogu a vyhledáte "Kompilovaný plán" cacheobjtype . Zástupný procedura má jedinečný plan_handle. Zkompilovaný plán neobsahuje přidružený plán provádění a dotazování na popisovač plánu nevrací grafický plán ani plán zobrazení XML.
Příznak trasování 8032 vrátí parametry omezení mezipaměti na nastavení RTM SQL Serveru 2005 (9.x), které obecně umožňuje větší mezipaměti. Toto nastavení použijte, když se často opakovaně používané položky mezipaměti nevejdou do mezipaměti a když optimize for ad hoc workloads se nepovedlo vyřešit problém s mezipamětí plánu.
Výstraha
Příznak trasování 8032 může způsobit nízký výkon, pokud velké mezipaměti zpřístupní méně paměti pro ostatní uživatele paměti, například fond vyrovnávací paměti.
Poznámky
optimize for ad hoc workloads Nastavení možnosti pro vliv pouze na 1 nové plány; plány, které už jsou v mezipaměti plánů, nemají vliv.
Pokud chcete mít vliv na plány dotazů uložených v mezipaměti okamžitě, musí být mezipaměť plánu vymazána pomocí PROCEDURE_CACHE ALTER DATABASE SCOPED CONFIGURATION CLEAR nebo je nutné restartovat SQL Server.
Recommendations
Vyhněte se velkému počtu plánů s jedním použitím v mezipaměti plánů. Mezi běžné příčiny patří:
Datové typy parametrů dotazu, které nejsou konzistentně definované. To platí zejména pro délku řetězců, ale může se použít u libovolného datového typu, který má maxlength, přesnost nebo měřítko. Pokud se například parametr pojmenovaný
@Greetingpředává jako nvarchar(10) při jednom volání a nvarchar(20) při dalším volání, vytvoří se pro každou velikost parametru samostatné plány.Dotazy, které nejsou parametrizovány. Pokud má dotaz jeden nebo více parametrů, pro které se pevně zakódované hodnoty odesílají do databázového stroje, může pro každý dotaz existovat velký počet plánů dotazů. Plány můžou existovat pro každou kombinaci datových typů a délek parametrů dotazu, které byly použity.
Pokud početplánůchm plánům pro jedno použití využívá významnou část paměti databázového stroje SQL Serveru, použijte tuto možnost serveru ke snížení využití paměti s těmito objekty.
optimize for ad hoc workloads Pokud je tato možnost povolená, nemůžete zobrazit plány spouštění pro dotazy s jedním použitím, protože do mezipaměti je uložena pouze zástupný procedura plánu. V závislosti na vašem prostředí a úloze můžete využít následující dvě funkce:
Funkce Úložiště dotazů , která byla zavedena v SQL Serveru 2016 (13.x), pomáhá rychle najít rozdíly v výkonu způsobené změnami plánu dotazů. Úložiště dotazů je ve výchozím nastavení povolené pro nové databáze v SQL Serveru 2022 (16.x) a novějších verzích.
Vynucené parametrizace může zlepšit výkon určitých databází snížením frekvence kompilací dotazů a rekompilacemi. Databáze, které využívají vynucené parametrizace, mají obecně vysoké objemy souběžných dotazů ze zdrojů, jako jsou aplikace typu point-of-sale.
Vynucené parametrizace může způsobit problémy s výkonem kvůli citlivosti parametrů. Další informace najdete v tématu Zkoumání a řešení problémů citlivých na parametry. Pro SQL Server 2022 (16.x) a novější verze můžete také povolit optimalizaci plánu citlivého na parametry.
Examples
Pokud chcete zjistit počet plánů v mezipaměti s jedním použitím, spusťte následující dotaz:
SELECT objtype,
cacheobjtype,
SUM(refcounts) AS AllRefObjects,
SUM(CAST(size_in_bytes AS BIGINT)) / 1024 / 1024 AS SizeInMB
FROM sys.dm_exec_cached_plans
WHERE objtype = 'Adhoc'
AND usecounts = 1
GROUP BY objtype, cacheobjtype;
Související obsah
- sys.dm_exec_cached_plans (Transact-SQL)
- možnosti konfigurace serveru
- Monitorování výkonu s využitím úložiště dotazů
- Průvodce architekturou zpracování dotazů
- Optimalizace plánu citlivého na parametry