Delen via


Hoe kunt u zien of er een extern(e) pushdown is opgetreden?

In dit artikel wordt beschreven hoe u kunt bepalen of een PolyBase-query profiteert van pushdown naar de externe gegevensbron. Zie pushdownberekeningen in PolyBasevoor meer informatie over externe pushdownberekeningen.

Profiteert mijn query van externe pushdown-functionaliteit?

Pushdownberekening verbetert de prestaties van query's op externe gegevensbronnen. Bepaalde rekentaken worden gedelegeerd aan de externe gegevensbron in plaats van naar de SQL Server te worden gebracht. Met name in het geval van het filteren en het samenvoegen via pushdown kan de workload op de SQL Server-instantie aanzienlijk worden verminderd.

PolyBase-pushdownberekeningen kunnen de prestaties van de query aanzienlijk verbeteren. Als een PolyBase-query langzaam wordt uitgevoerd, moet u bepalen of de pushdown van uw PolyBase-query plaatsvindt.

Er zijn drie verschillende scenario's waarbij pushdown kan worden waargenomen in het uitvoeringsschema.

  • Filterpredicaatpushdown
  • Pushdown samenvoegen
  • Aggregatiepushdown

Notitie

Er gelden beperkingen op wat naar externe gegevensbronnen kan worden overgedragen met PolyBase-pushdownberekeningen:

Er zijn twee nieuwe functies van SQL Server 2019 (15.x) geïntroduceerd zodat beheerders kunnen bepalen of een PolyBase-query naar de externe gegevensbron wordt gepusht:

In dit artikel vindt u meer informatie over het gebruik van elk van deze twee use cases voor elk van de drie pushdownscenario's.

TF6408 gebruiken

Standaard wordt in het geschatte uitvoeringsplan het externe queryplan niet weergegeven en ziet u alleen het operatorobject voor externe query's. Bijvoorbeeld een geschat uitvoeringsplan van SQL Server Management Studio (SSMS):

een schermopname van een geschat uitvoeringsplan in SSMS.

Oftewel in Azure Data Studio:

Een schermopname van een geschat uitvoeringsplan van Azure Data Studio.

Vanaf SQL Server 2019 (15.x) kunt u wereldwijd een nieuwe traceringsvlag 6408 inschakelen met behulp van DBCC TRACEON-. Bijvoorbeeld:

DBCC TRACEON (6408, -1);  

Deze traceringsvlag werkt alleen met geschatte uitvoeringsplannen en heeft geen effect op werkelijke uitvoeringsplannen. Deze traceringsvlag geeft informatie weer over de Remote Query-operator en laat zien wat er gebeurt tijdens de Remote Query-fase.

uitvoeringsplannen worden van rechts naar links gelezen, zoals aangegeven door de richting van de pijlen. Als een operator zich rechts van een andere operator bevindt, wordt gezegd dat deze eraan voorafgaat. Als een operator zich links van een andere operator bevindt, wordt dat 'erachter' genoemd.

  • Markeer in SSMS de query en selecteer Geschatte uitvoeringsplan weergeven op de werkbalk of gebruik Ctrl+L-.
  • Markeer de query in Azure Data Studio en selecteer Uitleg. Bekijk vervolgens de volgende scenario's om te bepalen of pushdown heeft plaatsgevonden.

Elk van de onderstaande voorbeelden bevat de uitvoer van SSMS en Azure Data Studio.

Pushdown van filterpredicaat (weergave met uitvoeringsplan)

Houd rekening met de volgende query, die gebruikmaakt van een filterpredicaat in de WHERE-component:

SELECT *
FROM [Person].[BusinessEntity] AS be
WHERE be.BusinessEntityID = 17907;

Als de pushdown van het filterpredicaat plaatsvindt, bevindt de filteroperator zich vóór de externe operator. Wanneer de filteroperator zich vóór de externe operator bevindt, vindt het filteren plaats voordat de selectie uit de externe gegevensbron wordt gehaald, wat aangeeft dat het filterpredicaat is toegepast.

Met pushdown van filtervoorwaarde (weergave met uitvoeringsplan)

Nu traceringsvlag 6408 is ingeschakeld, ziet u nu aanvullende informatie in de geschatte uitvoer van het uitvoeringsplan. De uitvoer varieert tussen SSMS en Azure Data Studio.

In SSMS wordt het externe queryplan weergegeven in het geschatte uitvoeringsplan als Query 2 (sp_execute_memo_node_1) en komt overeen met de operator Externe query in Query 1. Bijvoorbeeld:

Een schermopname van een uitvoeringsplan met filter predicaat pushdown vanuit SSMS.

In Azure Data Studio wordt de uitvoering van externe query's in plaats daarvan weergegeven als één queryplan. Bijvoorbeeld:

Een schermopname van een uitvoeringsplan met filterpredicaatpushdown vanuit Azure Data Studio.

Zonder pushdown van filtervoorwaarde (weergave met uitvoeringsplan)

Als er geen pushdown van het filterpredicaat optreedt, is het filter na de externe operator.

Het geschatte uitvoeringsplan van SSMS:

Een schermopname van een uitvoeringsplan zonder het doorvoeren van filterpredicaten vanuit SSMS.

Het geschatte uitvoeringsplan van Azure Data Studio:

Een schermopname van een uitvoeringsplan zonder filterpredicaatpushdown vanuit Azure Data Studio.

Pushdown van JOIN

Houd rekening met de volgende query die gebruikmaakt van de JOIN-operator voor twee externe tabellen in dezelfde externe gegevensbron:

SELECT be.BusinessEntityID, bea.AddressID
FROM [Person].[BusinessEntity] AS be
INNER JOIN [Person].[BusinessEntityAddress] AS bea
ON be.BusinessEntityID = bea.BusinessEntityID;

Als de JOIN naar de externe gegevensbron wordt gepusht, zal de Join-operator voor de externe operator staan. In dit voorbeeld zijn zowel [BusinessEntity] als [BusinessEntityAddress] externe tabellen.

Met pushdown van join (weergave met uitvoeringsplan)

Het geschatte uitvoeringsplan van SSMS:

een schermopname van een uitvoeringsplan met join pushdown in SSMS.

Het geschatte uitvoeringsplan van Azure Data Studio:

een schermopname van een uitvoeringsplan met join pushdown vanuit Azure Data Studio.

Zonder pushdown van join (weergave met uitvoeringsplan)

Als de JOIN niet naar de externe gegevensbron wordt gepusht, bevindt de joinoperator zich na de externe operator. In SSMS bevindt de externe operator zich in het queryplan voor sp_execute_memo_node, dat zich in de operator Remote Query in Query 1 bevindt. In Azure Data Studio is de join-operator na de externe operator(s).

Het geschatte uitvoeringsplan van SSMS:

Een schermopname van een uitvoeringsplan zonder join-pushdown vanuit SSMS.

Het geschatte uitvoeringsplan van Azure Data Studio:

Een schermopname van een uitvoeringsplan zonder deel te nemen aan pushdown vanuit Azure Data Studio.

Pushdown van aggregatie (weergave met uitvoeringsplan)

Houd rekening met de volgende query, die gebruikmaakt van een statistische functie:

SELECT SUM([Quantity]) as Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];

Met doordrukken van aggregatie (weergave met uitvoeringsplan)

Als er een pushdown van de aggregatie plaatsvindt, bevindt de aggregatieoperator zich vóór de externe operator. Wanneer de aggregatieoperator zich vóór de externe operator bevindt, is de aggregatie uitgevoerd voordat deze vanuit de externe gegevensbron werd opgevraagd, wat aangeeft dat de aggregatie naar beneden is doorgeschoven.

Het geschatte uitvoeringsplan van SSMS:

een schermopname van een uitvoeringsplan met aggregate pushdown van SSMS.

Het geschatte uitvoeringsplan van Azure Data Studio:

Een schermopname van een uitvoeringsplan met een geaggregeerde pushdown vanuit Azure Data Studio.

Zonder pushdown van aggregatie (weergave met uitvoeringsplan)

Als er geen pushdown van de aggregatie plaatsvindt, is de aggregatieoperator na de externe operator.

Het geschatte uitvoeringsplan van SSMS:

Een schermopname van een uitvoeringsplan zonder aggregate pushdown vanuit SSMS.

Het geschatte uitvoeringsplan van Azure Data Studio:

Een schermopname van een uitvoeringsplan zonder aggregatie-pushdown vanuit Azure Data Studio.

DMV gebruiken

In sql Server 2019 (15.x) en nieuwere versies toont de read_command kolom van sys.dm_exec_external_work DMV de query die naar de externe gegevensbron wordt verzonden. Hiermee kunt u bepalen of er pushdown plaatsvindt, maar het geeft het uitvoeringsplan niet weer. Voor het weergeven van de externe query is GEEN TF6408 vereist.

Notitie

Voor Hadoop- en Azure-opslag retourneert de read_command altijd NULL.

U kunt de volgende query uitvoeren en de start_time/end_time en read_command gebruiken om de query te identificeren die wordt onderzocht:

SELECT execution_id, start_time, end_time, read_command
FROM sys.dm_exec_external_work
ORDER BY execution_id desc;

Notitie

Een beperking van de sys.dm_exec_external_work methode is dat het read_command veld in de DMV is beperkt tot 4000 tekens. Als de query voldoende lang is, wordt de read_command mogelijk afgekapt voordat u de functie WHERE/JOIN/aggregatie in de read_commandziet.

Pushdown van filterpredicaat (weergave met DMV)

Bekijk de query die in het vorige filterpredicaatvoorbeeld wordt gebruikt:

SELECT *
FROM [Person].[BusinessEntity] be
WHERE be.BusinessEntityID = 17907;

Met pushdown van het filter (weergave met DMV)

U kunt zien of de pushdown van het filterpredicaat plaatsvindt door de read_command in de DMV te controleren. U ziet zoiets als dit voorbeeld:

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;

De WHERE-component bevindt zich in de opdracht die wordt verzonden naar de externe gegevensbron, wat betekent dat het filterpredicaat wordt geëvalueerd bij de externe gegevensbron. Filteren op de gegevensset vond plaats in de externe gegevensbron, en alleen de gefilterde gegevensset werd opgehaald door PolyBase.

Zonder pushdown van filter (weergave met DMV)

Als er geen pushdown plaatsvindt, zult u iets als het volgende zien:

SELECT "BusinessEntityID","rowguid","ModifiedDate" FROM "AdventureWorks2022"."Person"."BusinessEntity"

Er is geen WHERE-component in de opdracht die naar de externe gegevensbron wordt verzonden, dus het filterpredicaat wordt niet omlaag gepusht. Filteren over de gehele dataset is door SQL Server uitgevoerd, nadat de dataset door PolyBase is opgehaald.

Pushdown van JOIN (met weergave via DMV)

Bekijk de query die in het vorige JOIN-voorbeeld wordt gebruikt:

SELECT be.BusinessEntityID, bea.AddressID
FROM [Person].[BusinessEntity] be
INNER JOIN [Person].[BusinessEntityAddress] bea ON be.BusinessEntityID = bea.BusinessEntityID;

Met verplaatsing van samenvoeging (weergave met DMV)

Als de JOIN naar de externe gegevensbron wordt doorgeschoven, ziet u iets als:

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;

De JOIN-component bevindt zich in de opdracht die naar de externe gegevensbron wordt verzonden, dus de JOIN wordt omlaag gepusht. De join van de gegevensset heeft plaatsgevonden in externe gegevensbron en alleen de gegevensset die aan de joinvoorwaarde voldoet is binnengesleept door PolyBase.

Zonder pushdown van join (weergave met DMV)

Als de pushdown van de join niet plaatsvindt, ziet u dat er twee verschillende query's worden uitgevoerd op de externe gegevensbron:

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;

Het samenvoegen van de twee gegevenssets vond plaats aan de SQL Server-zijde, nadat beide gegevenssets zijn opgehaald door PolyBase.

Verplaatsing van aggregatie (weergave met DMV)

Houd rekening met de volgende query, die gebruikmaakt van een statistische functie:

SELECT SUM([Quantity]) as Quant
FROM [AdventureWorks2022].[Production].[ProductInventory];

Met Pushdown van aggregatie (weergave met DMV)

Als er een pushdown van de aggregatie plaatsvindt, ziet u de aggregatiefunctie in de read_command. Bijvoorbeeld:

SELECT [T1_1].[col] AS [col] FROM (SELECT SUM([T2_1].[Quantity]) AS [col] 
FROM [AdventureWorks2022].[Production].[ProductInventory] AS T2_1) AS T1_1

De aggregatiefunctie bevindt zich in de opdracht die naar de externe gegevensbron wordt verzonden, zodat de aggregatie omlaag wordt gepusht. De aggregatie is opgetreden bij de externe gegevensbron en alleen de geaggregeerde gegevensset is opgehaald door PolyBase.

Zonder pushdown van aggregatie (weergave met DMV)

Als de pushdown van de aggregatie niet plaatsvindt, ziet u niet de aggregatiefunctie in de read_command. Bijvoorbeeld:

SELECT "Quantity" FROM "AdventureWorks2022"."Production"."ProductInventory"

De aggregatie is uitgevoerd in SQL Server nadat de niet-samengevoegde gegevensset is opgehaald door PolyBase.

Volgende stappen