Delen via


PolyBase bewaken en problemen oplossen

van toepassing op:SQL Server-

Gebruik de technieken in dit onderwerp om problemen met PolyBase op te lossen.

Catalogusweergaven

Gebruik de catalogusweergaven die hier worden vermeld om PolyBase-bewerkingen te beheren.

Bekijken Beschrijving
sys.external_tables (Transact-SQL) Identificeert externe tabellen.
sys.external_data_sources (Transact-SQL) Identificeert externe gegevensbronnen.
sys.external_file_formats (Transact-SQL) Identificeert externe bestandsindelingen.

Dynamische beheerweergaven

PolyBase-query's worden onderverdeeld in een reeks stappen binnen sys.dm_exec_distributed_request_steps. De volgende tabel biedt een koppeling van de stapnaam naar de bijbehorende DMV.

PolyBase-stap Gekoppelde DMV
HadoopJobOperation sys.dm_exec_external_operations
RandomIdOperation sys.dm_exec_distributed_request_steps
HadoopRoundRobinOperation sys.dm_exec_dms_workers
StreamingReturnOperation sys.dm_exec_dms_workers
OnOperation sys.dm_exec_distributed_sql_requests

PolyBase-query's monitoren met DMV's

Bewaak en los problemen met PolyBase-query's op met behulp van de volgende DMV's. Houd ook rekening met de volgende prestatieoverwegingen in PolyBase voor SQL Server.

  1. de langst lopende query's zoeken

    Noteer de uitvoerings-id van de langst lopende query.

     -- Find the longest running query  
    SELECT execution_id, st.text, dr.total_elapsed_time  
    FROM sys.dm_exec_distributed_requests  dr  
          cross apply sys.dm_exec_sql_text(sql_handle) st  
    ORDER BY total_elapsed_time DESC;  
    
  2. de langst lopende stap van de gedistribueerde query zoeken

    Gebruik de uitvoerings-id die in de vorige stap is vastgelegd. Noteer de stapindex van de langst lopende stap.

    Controleer de location_type van de langstlopende stap:

    • Head of Compute: impliceert een SQL-bewerking. Ga verder met stap 3a.

      • DMS: impliceert een PolyBase Data Movement Service-bewerking. Ga verder met stap 3b.
      -- Find the longest running step of the distributed query plan  
      SELECT execution_id, step_index, operation_type, distribution_type,   
      location_type, status, total_elapsed_time, command   
      FROM sys.dm_exec_distributed_request_steps   
      WHERE execution_id = 'QID4547'   
      ORDER BY total_elapsed_time DESC;  
      
  3. de uitvoeringsvoortgang van de langstlopende stap zoeken

    1. De uitvoeringsvoortgang van een SQL-stap zoeken

      Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.

      -- Find the execution progress of SQL step    
      SELECT execution_id, step_index, distribution_id, status,   
      total_elapsed_time, row_count, command   
      FROM sys.dm_exec_distributed_sql_requests   
      WHERE execution_id = 'QID4547' and step_index = 1;  
      
    2. de uitvoeringsvoortgang van een DMS-stap zoeken

      Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.

      -- Find the execution progress of DMS step    
      SELECT execution_id, step_index, dms_step_index, status,   
      type, bytes_processed, total_elapsed_time  
      FROM sys.dm_exec_dms_workers   
      WHERE execution_id = 'QID4547'   
      ORDER BY total_elapsed_time DESC;
      
  4. de informatie over externe DMS-bewerkingen zoeken

    Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.

    SELECT execution_id, step_index, dms_step_index, compute_node_id,   
    type, input_name, length, total_elapsed_time, status   
    FROM sys.dm_exec_external_work   
    WHERE execution_id = 'QID4547' and step_index = 7   
    ORDER BY total_elapsed_time DESC;  
    

Het PolyBase-queryplan weergeven

In SQL Server 2019 (15.x) kunt u het uitvoeringsplan bekijken dat is doorgegeven aan de externe gegevensbron met traceringsvlag 6408. Zie Hoe u kunt zien of externe pushdown heeft plaatsgevondenvoor meer informatie.

In SQL Server 2016 (13.x) of SQL Server 2017 (14.x) werkt deze alternatieve strategie:

  1. Schakel in SQL Server Management Studio de optie Werkelijke uitvoeringsplan weergave (Ctrl + M) in en voer de query uit.

  2. Selecteer het tabblad Uitvoeringsplan.

    schermopname van SQL Server Management Studio van een PolyBase-queryuitvoeringsplan.

  3. Klik met de rechtermuisknop op de operator Externe query en selecteer Eigenschappen.

  4. Kopieer en plak de externe query waarde in een teksteditor om het externe XML-queryplan weer te geven. Hieronder ziet u een voorbeeld.

De sql_operation tags geven bewerkingen in SQL Server aan. De dsql_operations met operation_types die niet 'AAN' zijn, geven de externe operators aan die worden gebruikt door de PolyBase Data Movement-service.

<dsql_query number_nodes="1" number_distributions="8" number_distributions_per_node="8">  
   <sql>ExecuteMemo explain query</sql>  
   <dsql_operations total_cost="0" total_number_operations="6">  
     <dsql_operation operation_type="RND_ID">  
       <identifier>TEMP_ID_74</identifier>  
     </dsql_operation>  
     <dsql_operation operation_type="ON">  
       <location permanent="false" distribution="AllDistributions" />  
       <sql_operations>  
         <sql_operation type="statement">CREATE TABLE [tempdb].[dbo].[TEMP_ID_74] ([SensorKey] INT NOT NULL, [CustomerKey] INT NOT NULL, [GeographyKey] INT, [Speed] FLOAT(53) NOT NULL, [YearMeasured] INT NOT NULL ) WITH(DATA_COMPRESSION=PAGE);</sql_operation>  
       </sql_operations>  
     </dsql_operation>  
     <dsql_operation operation_type="ON">  
       <location permanent="false" distribution="AllDistributions" />  
       <sql_operations>  
         <sql_operation type="statement">EXEC [tempdb].[sys].[sp_addextendedproperty] @name=N'IS_EXTERNAL_STREAMING_TABLE', @value=N'true', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'TEMP_ID_74'</sql_operation>  
       </sql_operations>  
     </dsql_operation>  
     <dsql_operation operation_type="ON">  
       <location permanent="false" distribution="AllDistributions" />  
       <sql_operations>  
         <sql_operation type="statement">UPDATE STATISTICS [tempdb].[dbo].[TEMP_ID_74] WITH ROWCOUNT = 2401, PAGECOUNT = 7</sql_operation>  
       </sql_operations>  
     </dsql_operation>  
     <dsql_operation operation_type="MULTI">  
       <dsql_operation operation_type="STREAMING_RETURN">  
         <operation_cost cost="1" accumulative_cost="1" average_rowsize="24" output_rows="5762.1" />  
         <location distribution="AllDistributions" />  
         <select>SELECT [T1_1].[SensorKey] AS [SensorKey],  
          [T1_1].[CustomerKey] AS [CustomerKey],  
          [T1_1].[GeographyKey] AS [GeographyKey],  
          [T1_1].[Speed] AS [Speed],  
          [T1_1].[YearMeasured] AS [YearMeasured]  
   FROM   (SELECT [T2_1].[SensorKey] AS [SensorKey],  
                  [T2_1].[CustomerKey] AS [CustomerKey],  
                  [T2_1].[GeographyKey] AS [GeographyKey],  
                  [T2_1].[Speed] AS [Speed],  
                  [T2_1].[YearMeasured] AS [YearMeasured]  
           FROM   [tempdb].[dbo].[TEMP_ID_74] AS T2_1  
           WHERE  ([T2_1].[Speed] > CAST (6.50000000000000000E+001 AS FLOAT))) AS T1_1</select>  
       </dsql_operation>  
       <dsql_operation operation_type="ExternalRoundRobinMove">  
         <operation_cost cost="16.594848" accumulative_cost="17.594848" average_rowsize="24" output_rows="19207" />  
         <external_uri>hdfs://<ip address>:8020/Demo/car_sensordata.tbl/</external_uri>  
         <destination_table>[TEMP_ID_74]</destination_table>  
       </dsql_operation>  
     </dsql_operation>  
     <dsql_operation operation_type="ON">  
       <location permanent="false" distribution="AllDistributions" />  
       <sql_operations>  
         <sql_operation type="statement">DROP TABLE [tempdb].[dbo].[TEMP_ID_74]</sql_operation>  
       </sql_operations>  
     </dsql_operation>  
   </dsql_operations>  
</dsql_query>  

Knooppunten in een PolyBase-groep bewaken

Nadat u een set machines hebt geconfigureerd als onderdeel van een PolyBase-uitschaalgroep, kunt u de status van de machines bewaken. Voor meer informatie over het maken van een schaal-uit-groep, zie PolyBase-schaal-uit-groepen.

  1. Maak verbinding met SQL Server op het hoofdknooppunt van een groep.

  2. Voer DMV-sys.dm_exec_compute_nodes (Transact-SQL) uit om alle knooppunten in de PolyBase-groep weer te geven.

  3. Voer DMV sys.dm_exec_compute_node_status (Transact-SQL) uit om de status van alle knooppunten in de PolyBase-groep weer te geven.

Hoge beschikbaarheid van Hadoop-naamknooppunt

PolyBase maakt momenteel geen interface met Name Node HA-services zoals Zookeeper of Knox. Er is echter een bewezen tijdelijke oplossing die kan worden gebruikt om de functionaliteit te bieden.

Tijdelijke oplossing: gebruik de DNS-naam om verbindingen om te leiden naar het actieve naamknooppunt. Om dit te doen, moet u ervoor zorgen dat de externe gegevensbron een DNS-naam gebruikt om te communiceren met het naamknooppunt. Wanneer failover van het naamknooppunt optreedt, moet u het IP-adres wijzigen dat is gekoppeld aan de DNS-naam die wordt gebruikt in de definitie van de externe gegevensbron. Hiermee worden alle nieuwe verbindingen omgeleid naar het juiste naamknooppunt. Bestaande verbindingen mislukken wanneer de failover plaatsvindt. Om dit proces te automatiseren, kan een "heartbeat" het actieve Name Node pingen. Als de heart beat mislukt, kan men aannemen dat er een failover is opgetreden en automatisch overschakelt naar het IP-adres van de secundaire database.

Locaties van logboekbestanden

Op Windows-servers bevinden de logboeken zich standaard in het pad naar de installatiemap: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\.

Op Linux-servers bevinden de logboeken zich standaard in /var/opt/mssql/log/polybase.

Logboekbestanden voor PolyBase-gegevensverplaatsing:

  • <INSTANCENAME>_<SERVERNAME>_Dms_errors.log
  • <INSTANCENAME>_<SERVERNAME>_Dms_movement.log

Logboekbestanden van de PolyBase-engineservice:

  • <INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
  • <INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
  • <INSTANCENAME>_<SERVERNAME>_DWEngine_server.log

In Windows, PolyBase Java-logboekbestanden:

  • <SERVERNAME> Dms polybase.log
  • <SERVERNAME>_DWEngine_polybase.log

In Linux, PolyBase Java-logboekbestanden:

  • /var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
  • /var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log

Foutberichten en mogelijke oplossingen

Zie PolyBase-fouten en mogelijke oplossingenvoor veelvoorkomende scenario's voor probleemoplossing.