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.
Upozornění
Funkce ukládání do mezipaměti sady výsledků je aktuálně v datovém skladu Fabric zakázaná. Další informace najdete v známém problému ve skladišti dat Fabric.
Ukládání sady výsledků do mezipaměti je integrovaná optimalizace výkonu pro koncové body Analýzy Fabric Data Warehouse a Lakehouse SQL, které vylepšují latenci čtení.
Ukládání sad výsledků do mezipaměti funguje tak, že konečné sady výsledků pro příslušné SELECT dotazy T-SQL se ukládají, aby následná spuštění, která využijí mezipaměť, zpracovala pouze konečnou sadu výsledků. To může obejít složitou kompilaci a zpracování dat původního dotazu a rychlejší vrácení následných dotazů.
Scénáře datových skladů obvykle zahrnují analytické dotazy, které zpracovávají velké objemy dat za účelem dosažení relativně malého výsledku. Například SELECT dotaz, který obsahuje více spojení a provádí čtení a náhodné prohazování na milionech řádků dat, může vést k agregaci, která je dlouhá jenom několik řádků. U úloh, jako jsou sestavy nebo řídicí panely, které mají tendenci opakovaně spouštět stejné analytické dotazy, je možné stejný náročný výpočet aktivovat vícekrát, i když konečný výsledek zůstane stejný. Ukládání do mezipaměti sady výsledků zlepšuje výkon v těchto a podobných scénářích pro zhruba stejné náklady.
Automatická správa mezipaměti
Mezipaměť sady výsledků funguje transparentně. Po povolení se příležitostně u dotazů využije vytváření a opakované použití mezipaměti.
Ukládání sady výsledků do mezipaměti se vztahuje na SELECT dotazy T-SQL na tabulky skladu, zástupce ke zdrojům OneLake a zástupce ke zdrojům mimo Azure. Správa mezipaměti se zpracovává automaticky a podle potřeby pravidelně vyřazuje mezipaměť.
Kromě toho, jak se vaše data mění, je konzistence výsledků zajištěna tím, že zneplatní mezipaměť vytvořenou dříve.
Konfigurace ukládání sady výsledků do mezipaměti
Ukládání sady výsledků do mezipaměti je možné konfigurovat na úrovni položky a ve výchozím nastavení je povoleno pro všechny koncové body Fabric Warehouse a Lakehouse SQL Analytics.
Jakmile je tato možnost povolená, můžete ji v případě potřeby zakázat na úrovni položky nebo pro jednotlivé dotazy.
Konfigurace na úrovni položek
Hodnotu nastavení je možné zkontrolovat v sys.databases, například zobrazit hodnotu aktuálního kontextu v SQL analytickém koncovém bodu Fabric Warehouse nebo Lakehouse.
SELECT name, is_result_set_caching_on
FROM sys.databases
WHERE database_id = db_id();
Zakázání ukládání sady výsledků do mezipaměti:
ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;
Konfigurace na úrovni dotazu
Jakmile je u položky povolené ukládání sady výsledků do mezipaměti, může být pro jednotlivé dotazy zakázané.
Toto může být užitečné při ladění nebo A/B testování dotazu. Zakažte ukládání sady výsledků dotazu do mezipaměti připojením tohoto tipu SELECTna konec :
OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );
Kontrola využití mezipaměti sady výsledků
Využití mezipaměti sady výsledků lze zkontrolovat na dvou místech: Výstup hlášení a systémové zobrazení queryinsights.exec_requests_history.
Ve výstupu zprávy dotazu (viditelné v editoru dotazů infrastruktury nebo v aplikaci SQL Server Management Studio) se po spuštění dotazu zobrazí příkaz "Mezipaměť sady výsledků byla použita", pokud dotaz mohl použít existující mezipaměť sady výsledků.
Ve queryinsights.exec_requests_history se ve sloupci result_cache_hit zobrazí hodnota označující využití mezipaměti sady výsledků pro každé spuštění dotazu:
-
2: dotaz použil mezipaměť sady výsledků (přístup do mezipaměti) -
1: dotaz vytvořil mezipaměť sady výsledků. -
0: Dotaz nebyl použitelný pro vytvoření nebo použití sady výsledků v mezipaměti.
Například:
SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;
Kvalifikace pro ukládání do mezipaměti sady výsledků
SELECT Když se dotaz vydá, hodnotí se, zda se výsledky dotazu uloží do mezipaměti. Aby bylo možné vytvářet a používat mezipaměť sady výsledků, musí být splněny různé požadavky. Některé z nich pomáhají udržovat úložiště mezipaměti v rámci interních limitů, některé pomáhají rezervovat mezipaměť pro složité dotazy, a jiné pomáhají udržovat správnost výsledků při opakovaných zásazích. Zjevný příklad spočívá v omezení SELECT dotazů s GETDATE() tak, aby jejich výsledky nebyly ukládány do mezipaměti, ale existují i jiné drobné případy, kdy se Fabric rozhodne výsledky neukládat do mezipaměti.
Následující seznam obsahuje běžné diskvalifikace pro ukládání sad výsledků do mezipaměti ve službě Fabric Data Warehouse. Pokud zjistíte, že dotaz nebyl použitelný pro vytvoření mezipaměti sady výsledků, může to být způsobeno jedním nebo více z těchto důvodů:
- Ukládání sady výsledků do mezipaměti není u aktuálně připojené položky povolené nebo je u položky povolené, ale dotaz obsahoval nápovědu
DISABLE_RESULT_SET_CACHE. - Dotaz není čistý
SELECT, napříkladCREATE TABLE AS SELECT(CTAS),SELECT-INTO, jiný jazyk úprav dat - Dotaz odkazuje na systémový objekt, dočasnou tabulku, funkci metadat nebo neodkazuje na žádné distribuované objekty.
- Dotaz neodkazuje alespoň na jednu tabulku s nejméně 100 000 řádky.
- Dotaz odkazuje na objekt mimo aktuálně připojenou položku Fabric (například dotaz mezi databázemi).
- Dotaz je v rámci explicitní transakce nebo smyčky
WHILE. - Výstup dotazu obsahuje nepodporovaný datový typ nebo
VARCHAR(MAX)datový typ neboVARBINARY(MAX)datový typ. Podporované datové typy najdete v tématu Datové typy v datovém skladu Fabric. - Dotaz obsahuje
CASTneboCONVERTobsahuje nějaký odkaz na datum nebo sql_variant datový typ. - Dotaz obsahuje konstanty modulu runtime (například
CURRENT_USERneboGETDATE()) - Výsledek dotazu se odhaduje na > 10 000 řádků.
- Dotaz obsahuje nedeterministické předdefinované funkce, agregační funkce okna nebo seřazené funkce jako
PARTITION BY … ORDER BY. Viz Deterministické a nedeterministické funkce. - Dotaz používá dynamické maskování dat, zabezpečení na úrovni řádků nebo jiné funkce zabezpečení.
- Dotaz používá časové cestování.
- Dotaz použije ORDER BY u sloupce nebo výrazu, který není součástí výstupu dotazu.
- Dotaz je v relaci, která obsahuje příkazy na úrovni
SETrelace s nenástavbovými hodnotami (například nastavenímQUOTED_IDENTIFIERnaOFF) - Systém dosáhl interních limitů mezipaměti. Procesy vyřazení mezipaměti na pozadí uvolní místo před vytvořením nové mezipaměti.
Tato pravidla platí také pro opakované použití mezipaměti při následných spuštěních stejného dotazu. Mezipaměť se navíc nemusí používat v následujících scénářích:
- Jakákoli změna odkazovaných tabulek od vytvoření mezipaměti
- Pracovní prostor přešel do offline režimu od vytvoření mezipaměti, podobně jako caching v paměti RAM a na disku.
- Uživatel nemá dostatečná oprávnění k objektům v dotazu.
- Dotaz se volá z jiného připojení k jezeru nebo skladu, než kdy byl vydán původní dotaz. (Dotazy mezi databázemi nemají nárok na ukládání sady výsledků do mezipaměti.)
- Dotaz používá jiné výstupní sloupce, řazení sloupců nebo aliasy než původní dotaz.
- Dotaz uložený v mezipaměti se za 24 hodin nepoužil.
Poznámka:
Vzhledem k tomu, že se tyto kvalifikace interně hodnotí za nejlepší použití ukládání sad výsledků do mezipaměti, je důležité mít na paměti, že je možné je v budoucnu aktualizovat.