Share via


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

In dit artikel wordt uitgelegd hoe u kunt bepalen of een PolyBase-query profiteert van pushdown naar de externe gegevensbron. Zie Pushdown-berekeningen in PolyBase voor 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 het SQL Server-exemplaar 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, controleert u of de pushdown van uw PolyBase-query plaatsvindt.

U kunt pushdown in het uitvoeringsplan in drie verschillende scenario's waarnemen:

  • Filterpredicaatpushdown
  • Pushdown samenvoegen
  • Aggregatiepushdown

Met twee nieuwe functies van SQL Server 2019 (15.x) kunnen beheerders 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.

Beperkingen

De volgende beperkingen zijn van invloed op wat u naar externe gegevensbronnen kunt pushen met pushdownberekeningen in PolyBase:

Traceringsvlag 6408 gebruiken

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

Schermopname van een geschat uitvoeringsplan in SSMS.

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 invloed op werkelijke uitvoeringsplannen. Deze traceringsvlag geeft informatie weer over de operator Externe query die laat zien wat er gebeurt tijdens de fase Externe query.

Overzicht van het uitvoeringsplan wordt van rechts naar links gelezen, zoals aangegeven door de richting van de pijlen. Als een operator zich rechts van een andere operator bevindt, is deze vóór de andere operator. Als een operator zich links van een andere operator bevindt, dan volgt deze erna.

  • Markeer de query in SSMS en selecteer Geschat uitvoeringsplan weergeven op de werkbalk of gebruik Ctrl+L.

Elk van de volgende voorbeelden bevat de uitvoer van SSMS.

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 het filterpredicaat omlaag wordt geduwd, wordt de filteroperator vóór de externe operator in het uitvoeringsplan geplaatst. Wanneer de filteroperator zich vóór de externe operator bevindt, vindt het filteren plaats voordat de query-engine gegevens ophaalt uit de externe gegevensbron, wat betekent dat het filterpredicaat omlaag wordt gepusht.

Met pushdown van filtervoorwaarde (weergave met uitvoeringsplan)

Wanneer u traceringsvlag 6408 inschakelt, ziet u extra informatie in de geschatte uitvoer van het uitvoeringsplan.

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

Schermopname van een uitvoeringsplan met filter-predicaat-pushdown vanuit SSMS.

Zonder pushdown van filtervoorwaarde (weergave met uitvoeringsplan)

Als het filterpredicaat niet omlaag wordt gepusht, wordt de filteroperator weergegeven na de externe operator.

Het geschatte uitvoeringsplan van SSMS:

Schermopname van een uitvoeringsplan zonder filterpredicaat pushdown vanuit SSMS.

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 query engine de JOIN bewerking naar de externe gegevensbron pusht, wordt de operator Join vóór de externe operator weergegeven. In dit voorbeeld zijn zowel [BusinessEntity] als [BusinessEntityAddress] externe tabellen.

Met pushdown van join (weergave met uitvoeringsplan)

Het geschatte uitvoeringsplan van SSMS:

Schermopname van een uitvoeringsplan met join pushdown vanuit SSMS.

Zonder pushdown van join (weergave met uitvoeringsplan)

Als de query-engine de JOIN-bewerking niet naar de externe gegevensbron pusht, wordt de Join-operator na de externe operator weergegeven. In SSMS bevat het queryplan voor sp_execute_memo_node de externe operator. Deze operator maakt deel uit van de Remote Query-operator in Query 1.

Het geschatte uitvoeringsplan van SSMS:

Schermopname van een uitvoeringsplan zonder join pushdown vanuit SSMS.

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 de aggregatie naar beneden wordt verplaatst, verschijnt de aggregatieoperator vóór de externe operator. Wanneer de aggregatieoperator zich vóór de externe operator bevindt, voert de query de aggregatie uit voordat gegevens uit de externe gegevensbron worden geselecteerd. Dit betekent dat de aggregatie omlaag wordt gepusht.

Het geschatte uitvoeringsplan van SSMS:

Schermopname van een uitvoeringsplan met aggregate pushdown vanuit SSMS.

Zonder pushdown van aggregatie (weergave met uitvoeringsplan)

Als de aggregatie niet omhoog geduwd wordt, komt de aggregatie-operator na de externe operator.

Het geschatte uitvoeringsplan van SSMS:

Schermopname van een uitvoeringsplan zonder geaggregeerde pushdown van SSMS.

DMV gebruiken

In SQL Server 2019 (15.x) en latere versies toont de read_command kolom van sys.dm_exec_external_work DMV de query die u naar de externe gegevensbron verzendt. U kunt bepalen of pushdown plaatsvindt, maar het uitvoeringsplan wordt niet weergegeven. U hebt traceringsvlag 6408 niet nodig om de externe query weer te geven.

Notitie

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

Voer de volgende query uit en gebruik de start_time/end_time en read_command waarden om de query te identificeren die u onderzoekt:

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 lang genoeg is, kan de read_command worden afgekort voordat u de WHERE, JOIN, of de aggregatiefunctie in de read_command ziet.

Pushdown van filterpredicaat (weergave met DMV)

Bekijk de query die in het vorige filterpredicaatvoorbeeld wordt gebruikt:

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

Met pushdown van het filter (weergave met DMV)

U kunt de read_command in de DMV controleren om te zien of de pushdown van het filterpredicaat plaatsvindt. U ziet een vergelijkbaar voorbeeld van de volgende query:

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 opdracht die naar de externe gegevensbron wordt verzonden, bevat de WHERE component, wat betekent dat het filterpredicaat wordt geëvalueerd bij de externe gegevensbron. Filteren op de gegevensset vindt plaats in de externe gegevensbron en PolyBase haalt alleen de gefilterde gegevensset op.

Zonder pushdown van filter (weergave met DMV)

Wanneer er geen pushdown plaatsvindt, ziet u iets als:

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

De opdracht die naar de externe gegevensbron wordt verzonden bevat geen WHERE clausule, zodat het filterpredicaat niet wordt doorgestuurd. Filteren op de hele gegevensset vindt plaats aan de zijde van SQL Server, nadat PolyBase de gegevensset heeft opgehaald.

Pushdown van JOIN (met weergave via DMV)

Bekijk de query die in het vorige JOIN voorbeeld is gebruikt:

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

Met verplaatsing van samenvoeging (weergave met DMV)

Als u de JOIN omlaag pusht naar de externe gegevensbron, 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 opdracht die u naar de externe gegevensbron verzendt, bevat de JOIN component, zodat de JOIN opdracht omlaag wordt gepusht. De externe gegevensbron verwerkt de join in de gegevensset en PolyBase haalt alleen de gegevensset op die overeenkomt met de joinvoorwaarde.

Zonder pushdown van join (weergave met DMV)

Als de pushdown van de join niet plaatsvindt, ziet u twee verschillende query's die 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;

De SQL Server-zijde verwerkt het samenvoegen van de twee gegevenssets nadat PolyBase beide gegevenssets heeft opgehaald.

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)

Wanneer de 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 vindt plaats op de externe gegevensbron en PolyBase haalt alleen de geaggregeerde gegevensset op.

Zonder pushdown van aggregatie (weergave met DMV)

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

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

PolyBase haalt de niet-samengevoegde gegevensset op en SQL Server voert de aggregatie uit.