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.
Tento článek vysvětluje, jak určit, zda dotaz PolyBase má prospěch z pushdownu do externího zdroje dat. Další informace o externím pushdownu najdete v tématu Výpočty v PolyBase.
Má můj dotaz výhod externího nabízení?
Zpracování s využitím pushdown zlepšuje výkon dotazů na externí zdroje dat. Některé výpočetní úlohy se místo přenesení do instance SQL Serveru delegují na externí zdroj dat. Zejména v případech filtrování a přenesení spojení může být zátěž na instanci SQL Serveru výrazně snížena.
PolyBase pushdown výpočet může výrazně zlepšit výkon dotazu. Pokud dotaz PolyBase provádí pomalu, zkontrolujte, jestli dochází k posunu dotazu PolyBase.
Posun v plánu provádění můžete sledovat ve třech různých scénářích:
- Využití predikátu filtru pro efektivnější zpracování dat
- Připojit se ke snižování
- Optimalizace agregace
Dvě nové funkce SQL Serveru 2019 (15.x) umožňují správcům určit, jestli se dotaz PolyBase odesílá do externího zdroje dat:
- Zobrazení odhadovaného plánu provádění s příznakem trasování 6408
- Zobrazit
read_commandv dynamickém zobrazení správy sys.dm_exec_external_work
Tento článek obsahuje podrobnosti o tom, jak používat každý z těchto dvou případů použití pro každý ze tří scénářů prosazení.
Omezení
Následující omezení ovlivňují to, co můžete předat do externích zdrojů dat pomocí výpočtů pushdown v PolyBase:
Některé funkce T-SQL můžou zabránit optimalizaci přenosu. Další informace naleznete v tématu Funkce a omezení PolyBase.
Seznam funkcí T-SQL, které lze dále zpracovat, najdete v části Pushdown výpočty v PolyBase.
Použijte příznak trasování 6408
Ve výchozím nastavení odhadovaný plán provádění nezpřístupňuje plán vzdáleného dotazu. Zobrazí se pouze objekt operátoru vzdáleného dotazu. Například odhadovaný plán provádění ze sady SQL Server Management Studio (SSMS):
Počínaje SQL Serverem 2019 (15.x) můžete globálně povolit nový příznak trasování 6408 pomocí DBCC TRACEON. Například:
DBCC TRACEON (6408, -1);
Tento příznak trasování funguje pouze s odhadovanými plány provádění a nemá žádný vliv na skutečné plány provádění. Tento příznak trasování zveřejňuje informace o operátoru vzdáleného dotazu, který ukazuje, co se stane během fáze zpracování vzdáleného dotazu.
Přehled plánu provádění se čte zprava doleva, jak ukazuje směr šipek. Pokud je operátor napravo od jiného operátoru, je za ním. Pokud je operátor nalevo od jiného operátoru, je za ním.
- V nástroji SSMS zvýrazněte dotaz a na panelu nástrojů vyberte Zobrazit odhadovaný plán provádění nebo použijte ctrl+L.
Každý z následujících příkladů zahrnuje výstup z aplikace SSMS.
Posun predikátu filtru (zobrazení s plánem provádění)
Představte si následující dotaz, který v klauzuli WHERE používá predikát filtru:
SELECT *
FROM [Person].[BusinessEntity] AS be
WHERE be.BusinessEntityID = 17907;
Pokud je predikát filtru propagován dolů, objeví se operátor filtru před externím operátorem v prováděcím plánu. Pokud je operátor filtru před externím operátorem, filtrování proběhne dříve, než dotazovací modul načte data z externího zdroje dat, což znamená, že predikát filtru je vložen.
S odsdílením predikátu filtru (zobrazení s plánem provádění)
Když povolíte příznak trasování 6408, zobrazí se v odhadovaném výstupu plánu provádění další informace.
V nástroji SSMS se plán vzdáleného dotazu zobrazí jako dotaz 2 (sp_execute_memo_node_1) v odhadovaném plánu provádění. Odpovídá operátoru vzdáleného dotazu v dotazu 1. Například:
Bez přenesení predikátu filtru (prohlédnutí s prováděcím plánem)
Pokud predikát filtru není posunut, zobrazí se za externím operátorem operátor filtru.
Odhadovaný plán provádění z SSMS:
Snížení úrovně zpracování spojení
Představte si následující dotaz, který používá JOIN operátor pro dvě externí tabulky ve stejném externím zdroji dat:
SELECT be.BusinessEntityID,
bea.AddressID
FROM [Person].[BusinessEntity] AS be
INNER JOIN [Person].[BusinessEntityAddress] AS bea
ON be.BusinessEntityID = bea.BusinessEntityID;
Pokud dotazovací modul odešle JOIN operaci do externího zdroje dat, zobrazí se operátor Join před externím operátorem. V tomto příkladu jsou externí tabulky [BusinessEntity] i [BusinessEntityAddress].
S využitím pushdownu spojení (zobrazení s plánem provádění)
Odhadovaný plán provádění z SSMS:
Bez přenosu spojení (zobrazení s plánem provádění)
Pokud dotazovací modul neprosadí JOIN operaci do externího zdroje dat, operátor Spojení se objeví za externím operátorem. V nástroji SSMS zahrnuje plán sp_execute_memo_node dotazu externí operátor. Tento operátor je součástí operátoru vzdáleného dotazu v dotazu 1.
Odhadovaný plán provádění z SSMS:
Posun agregace (zobrazení s plánem provádění)
Představte si následující dotaz, který používá agregační funkci:
SELECT SUM([Quantity]) AS Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];
S posunem agregace (zobrazení s plánem provádění)
Pokud je agregace posunutá dolů, zobrazí se operátor agregace před externím operátorem. Pokud je operátor agregace před externím operátorem, provede dotaz agregaci před výběrem dat z externího zdroje dat, což znamená, že se agregace přenese dolů.
Odhadovaný plán provádění z SSMS:
Bez poklesu agregace (zobrazení s plánem provádění)
Pokud agregace není posunutá dolů, operátor agregace je za externím operátorem.
Odhadovaný plán provádění z SSMS:
Použijte DMV
Ve verzích SQL Serveru 2019 (15.x) a novějších se ve sloupci sys.dm_exec_external_work zobrazení dynamické správy zobrazí dotaz, který odešlete do externího zdroje dat. Můžete zjistit, zda dochází k optimalizaci pomocí pushdownu, ale nezpřístupňuje to plán provádění. K zobrazení vzdáleného dotazu nepotřebujete trasovací příznak 6408.
Poznámka
V případě hadoopu a úložiště Azure read_command vždy vrací NULL.
Spusťte následující dotaz a pomocí start_time/end_time hodnot read_command identifikujte dotaz, který prošetřujete:
SELECT execution_id,
start_time,
end_time,
read_command
FROM sys.dm_exec_external_work
ORDER BY execution_id DESC;
Poznámka
Jedním z omezení metody sys.dm_exec_external_work je, že pole read_command v zobrazení dynamické správy je omezeno na 4 000 znaků. Pokud je dotaz dostatečně dlouhý, read_command může být zkrácen před zobrazením WHERE, JOIN nebo agregační funkce v read_command.
Posun predikátu filtru (zobrazení s DMV)
Představte si dotaz použitý v předchozím příkladu predikátu filtru:
SELECT *
FROM [Person].[BusinessEntity] AS be
WHERE be.BusinessEntityID = 17907;
S odsadnutím filtru (zobrazení s dmV)
V zobrazení dynamické správy můžete zkontrolovat read_command , jestli dochází k posunu predikátu filtru. Zobrazí se podobný příklad jako v následujícím dotazu:
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID],
[T1_1].[rowguid] AS [rowguid],
[T1_1].[ModifiedDate] AS [ModifiedDate]
FROM (SELECT [T2_1].[BusinessEntityID] AS [BusinessEntityID],
[T2_1].[rowguid] AS [rowguid],
[T2_1].[ModifiedDate] AS [ModifiedDate]
FROM [AdventureWorks2022].[Person].[BusinessEntity] AS T2_1
WHERE ([T2_1].[BusinessEntityID] = CAST ((17907) AS INT))) AS T1_1;
Příkaz odeslaný do externího zdroje dat obsahuje WHERE klauzuli, což znamená, že predikát filtru se vyhodnocuje na externím zdroji dat. Filtrování datové sady probíhá v externím zdroji dat a PolyBase načte pouze filtrovanou datovou sadu.
Bez odsunutí filtru (zobrazení s DMV)
Pokud k odsunutí nedochází, zobrazí se něco takového:
SELECT "BusinessEntityID",
"rowguid",
"ModifiedDate"
FROM "AdventureWorks2022"."Person"."BusinessEntity";
Příkaz odeslaný do externího zdroje dat neobsahuje WHERE klauzuli, takže predikát filtru není přesunut dolů. Filtrování celé datové sady probíhá na straně SQL Serveru po načtení datové sady PolyBase.
Odsadení funkce JOIN (zobrazení s zobrazením dynamické správy)
Představte si dotaz použitý v předchozím JOIN příkladu:
SELECT be.BusinessEntityID,
bea.AddressID
FROM [Person].[BusinessEntity] AS be
INNER JOIN [Person].[BusinessEntityAddress] AS bea
ON be.BusinessEntityID = bea.BusinessEntityID;
S prosunutím spojení (zobrazení s DMV)
Pokud přenesete JOIN dolů k externímu zdroji dat, uvidíte něco takového:
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID],
[T1_1].[AddressID] AS [AddressID]
FROM (SELECT [T2_2].[BusinessEntityID] AS [BusinessEntityID],
[T2_1].[AddressID] AS [AddressID]
FROM [AdventureWorks2022].[Person].[BusinessEntityAddress] AS T2_1
INNER JOIN [AdventureWorks2022].[Person].[BusinessEntity] AS T2_2
ON ([T2_1].[BusinessEntityID] = [T2_2].[BusinessEntityID])) AS T1_1;
Příkaz, který odešlete do externího zdroje dat, obsahuje JOIN klauzuli, takže JOIN se posune dolů. Externí zdroj dat zpracovává spojení v datové sadě a PolyBase načte pouze datovou sadu, která odpovídá podmínce spojení.
Bez optimalizace spojení (zobrazení s DMV)
Pokud k prosazení spojení nedojde, zobrazí se dva různé dotazy spuštěné u externího zdroje dat.
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID],
[T1_1].[AddressID] AS [AddressID]
FROM [AdventureWorks2022].[Person].[BusinessEntityAddress] AS T1_1;
SELECT [T1_1].[BusinessEntityID] AS [BusinessEntityID]
FROM [AdventureWorks2022].[Person].[BusinessEntity] AS T1_1;
SQL Server se postará o spojení obou datových sad poté, co je PolyBase načte.
Posun agregace (zobrazení s zobrazením dynamické správy)
Představte si následující dotaz, který používá agregační funkci:
SELECT SUM([Quantity]) AS Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];
S efektivnějším zpracováním agregace (zobrazení s DMV)
Pokud dochází k pushdownu agregace, zobrazí se funkce agregace v rámci read_command. Například:
SELECT [T1_1].[col] AS [col]
FROM (SELECT SUM([T2_1].[Quantity]) AS [col]
FROM [AdventureWorks2022].[Production].[ProductInventory] AS T2_1) AS T1_1;
Agregační funkce je v příkazu odeslaném do externího zdroje dat, takže je agregace posunutá dolů. Agregace probíhá u externího zdroje dat a PolyBase načte pouze agregovanou datovou sadu.
Bez odsouvání agregace (zobrazení s DMV)
Pokud k odsunutí agregace nedochází, nevidíte funkci agregace v read_command. Například:
SELECT "Quantity"
FROM "AdventureWorks2022"."Production"."ProductInventory";
PolyBase načte neagregovanou datovou sadu a SQL Server provede agregaci.