Überwachung und Problembehandlung für PolyBase

Gilt für:SQL Server

Verwenden Sie die in diesem Thema vorgestellten Methoden, um in PolyBase eine Problembehandlung durchzuführen.

Katalogansichten

Verwenden Sie die hier aufgelisteten Katalogsichten, um PolyBase-Vorgänge zu verwalten.

Sicht Beschreibung
sys.external_tables (Transact-SQL) Identifiziert externe Tabellen.
sys.external_data_sources (Transact-SQL) Identifiziert externe Datenquellen.
sys.external_file_formats (Transact-SQL) Identifiziert externe Dateiformate.

Dynamische Verwaltungssichten

PolyBase-Abfragen werden in eine Reihe von Schritten unterteilt.sys.dm_exec_distributed_request_steps Die folgende Tabelle enthält eine Zuordnung zwischen der Bezeichnung des jeweiligen Schritts und der DMV.

PolyBase-Schritt Zugeordnete 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

Überwachen von PolyBase-Abfragen mithilfe von DMVs

Sie können PolyBase-Abfragen mithilfe der folgenden DMVs überwachen und eine Problembehandlung durchführen. Berücksichtigen Sie auch die folgenden Leistungsaspekte in PolyBase für SQL Server.

  1. Suchen der am längsten ausgeführten Abfrage

    Notieren Sie die Ausführungs-ID der am längsten ausgeführten Abfrage.

     -- 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. Suchen des am längsten ausgeführten Schritts der verteilten Abfrage

    Verwenden Sie die im vorherigen Schritt notierte Ausführungs-ID. Notieren Sie den Schrittindex des am längsten ausgeführten Schritts.

    Überprüfen Sie den location_type längsten Ausgeführten Schritt:

    • Head oder Compute: impliziert einen SQL-Vorgang. Fahren Sie mit Schritt 3a fort.

      • DMS: impliziert einen Vorgang des PolyBase-Datenverschiebungsdiensts. Fahren Sie mit Schritt 3b fort.
      -- 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. Suchen des Ausführungsprozesses des am längsten ausgeführten Schritts

    1. Suchen des Ausführungsstatus eines SQL-Schritts

      Verwenden Sie die in den vorherigen Schritten notierte Ausführungs-ID und den Schrittindex.

      -- 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. Suchen des Ausführungsstatus eines DMS-Schritts

      Verwenden Sie die in den vorherigen Schritten notierte Ausführungs-ID und den Schrittindex.

      -- 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. Suchen der Informationen über externe DMS-Vorgänge

    Verwenden Sie die in den vorherigen Schritten notierte Ausführungs-ID und den Schrittindex.

    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;  
    

Anzeigen des PolyBase-Abfrageplans

In SQL Server 2019 (15.x) können Sie den Ausführungsplan anzeigen, der mithilfe des Ablaufverfolgungsflags 6408 an die externe Datenquelle übergeben wird. Weitere Informationen finden Sie unter Identifizieren eines externen Pushdowns.

In SQL Server 2016 (13.x) oder SQL Server 2017 (14.x) funktioniert diese alternative Strategie:

  1. Aktivieren Sie in SQL Server Management Studio den tatsächlichen Ausführungsplan (STRG+M) und führen Sie die Abfrage aus.

  2. Wählen Sie die Registerkarte "Ausführungsplan " aus.

    Screenshot from SQL Server Management Studio of a PolyBase query execution plan.

  3. Klicken Sie mit der rechten Maustaste auf den Operator Remote Query (Remoteabfrage), und wählen Sie Eigenschaften.

  4. Kopieren Sie den Remoteabfragewert , und fügen Sie ihn in einen Text-Editor ein, um den XML-Remoteabfrageplan anzuzeigen. Ein entsprechendes Beispiel ist nachfolgend dargestellt.

Die sql_operation Tags geben Vorgänge in SQL Server an. Die dsql_operations nicht operation_types "EIN" sind, geben die externen Operatoren an, die vom PolyBase Data Movement-Dienst verwendet werden.

<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>  

Überwachen von Knoten in einer PolyBase-Gruppe

Nachdem Sie eine Gruppe von Computern als Teil einer PolyBase-Erweiterungsgruppe konfiguriert haben, können Sie den Status der Computer überwachen. Weitere Informationen zum Erstellen einer Erweiterungsgruppe finden Sie unter PolyBase-Erweiterungsgruppen.

  1. Stellen Sie auf dem Hauptknoten einer Gruppe eine Verbindung mit SQL Server her.

  2. Führen Sie die DMV-sys.dm_exec_compute_nodes (Transact-SQL) aus, um alle Knoten in der PolyBase-Gruppe anzuzeigen.

  3. Führen Sie den DMV-sys.dm_exec_compute_node_status (Transact-SQL) aus, um den Status aller Knoten in der PolyBase-Gruppe anzuzeigen.

Hadoop-Namensknoten mit Hochverfügbarkeit

PolyBase ist heute nicht mehr mit Hochverfügbarkeitsdiensten für Namenknoten wie Zookeeper oder KNOX verbunden. Es gibt jedoch eine bewährte Problemumgehung, die verwendet werden kann, um die Funktionalität bereitzustellen.

Problemumgehung: Verwenden Sie DNS-Name, um Verbindungen an den aktiven Namensknoten umzuleiten. Dafür müssen Sie sicherstellen, dass die externe Datenquelle einen DNS-Namen verwendet, um mit dem Namenknoten zu kommunizieren. Wenn ein Failover des Namenknotens auftritt, müssen Sie die IP-Adresse ändern, die dem DNS-Namen zugeordnet ist, der in der Definition der externen Datenquelle verwendet wird. Dadurch werden alle neuen Verbindungen zum richtigen Namenknoten umgeleitet. Vorhandene Verbindungen schlagen fehl, wenn ein Failover auftritt. Ein „Takt“ kann den aktiven Namenknoten pingen, um diesen Prozess zu automatisieren. Wenn der Takt fehlschlägt, ist anzunehmen, dass ein Failover aufgetreten ist, und ein automatischer Wechsel zur sekundären IP-Adresse kann vorgenommen werden.

Protokolldateispeicherorte

Auf Windows-Servern befinden sich die Protokolle standardmäßig im Installationsverzeichnispfad: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\.

Auf Linux-Servern befinden sich die Protokolle standardmäßig in /var/opt/mssql/log/polybase.

Protokolldateien der PolyBase-Datenverschiebung:

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

Protokolldateien des PolyBase-Engine-Diensts:

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

Unter Windows PolyBase-Java-Protokolldateien:

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

Unter Linux PolyBase-Java-Protokolldateien:

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

Fehlermeldungen und mögliche Lösungen

Informationen zu gängigen Szenarien zur Problembehandlung finden Sie unter Polybase-Fehler und mögliche Lösungen.