Superviser et dépanner PolyBase

S’applique à :SQL Server

Pour résoudre les problèmes de PolyBase, utilisez les techniques indiquées dans cette rubrique.

Affichages catalogue

Utilisez les affichages catalogue répertoriés ici pour gérer les opérations de PolyBase.

Affichage Description
sys.external_tables (Transact-SQL) Identifie les tables externes.
sys.external_data_sources (Transact-SQL) Identifie les sources de données externes.
sys.external_file_formats (Transact-SQL) Identifie les formats de fichiers externes.

Vues de gestion dynamique (DMV)

Les requêtes PolyBase sont divisées en une série d’étapes dans sys.dm_exec_distributed_request_steps. Le tableau suivant fournit un mappage du nom de l’étape à la vue DMV associée.

Étape PolyBase Vue DMV associée
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

Surveiller les requêtes PolyBase à l’aide de DMV

Surveillez et résolvez les problèmes des requêtes PolyBase à l’aide des vues DMV suivantes. Tenez également compte des considérations de performances suivantes dans PolyBase pour SQL Server.

  1. Rechercher les requêtes de plus longue durée

    Enregistrez l’ID d’exécution de la requête la plus longue.

     -- 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. Rechercher l’étape d’exécution la plus longue de la requête distribuée

    Utilisez l’ID d’exécution enregistrée à l’étape précédente. Enregistrez l’index d’étape de l’étape d’exécution la plus longue.

    Vérifiez l’étape d’exécution la location_type plus longue :

    • Head ou Compute : implique une opération SQL. Passez à l’étape 3a.

      • DMS : implique une opération de Service de déplacement de données PolyBase. Passez à l’étape 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. Rechercher la progression de l’exécution de l’étape d’exécution la plus longue

    1. Rechercher la progression de l’exécution d’une étape SQL

      Utilisez l’ID d’exécution et l’index d’étape enregistrés dans les étapes précédentes.

      -- 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. Rechercher la progression de l’exécution d’une étape DMS

      Utilisez l’ID d’exécution et l’index d’étape enregistrés dans les étapes précédentes.

      -- 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. Rechercher les informations sur les opérations DMS externes

    Utilisez l’ID d’exécution et l’index d’étape enregistrés dans les étapes précédentes.

    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;  
    

Afficher le plan de requête PolyBase

Dans SQL Server 2019 (15.x), vous pouvez afficher le plan d’exécution transmis à la source de données externe à l’aide de l’indicateur de trace 6408. Pour plus d’informations, consultez Comment savoir si un pushdown externe s’est produit.

Dans SQL Server 2016 (13.x) ou SQL Server 2017 (14.x), cette autre stratégie fonctionne :

  1. Dans SQL Server Management Studio, activez Include Actual Execution Plan (Ctrl+ M) et exécutez la requête.

  2. Sélectionnez l’onglet Plan d’exécution.

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

  3. Cliquez avec le bouton droit sur l’opérateur Remote Query et sélectionnez Propriétés.

  4. Copiez et collez la valeur de requête distante dans un éditeur de texte pour afficher le plan de requête distant XML. Voici un exemple.

Les sql_operation balises indiquent des opérations dans SQL Server. operation_types Les dsql_operations opérateurs externes utilisés par le service De déplacement de données PolyBase ne sont pas « ON ».

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

Surveiller les nœuds dans un groupe PolyBase

Après avoir configuré un ensemble d’ordinateurs dans le cadre d’un groupe de scale-out PolyBase, vous pouvez surveiller l’état des ordinateurs. Pour plus d’informations sur la création d’un groupe de scale-out, consultez Groupes de scale-out PolyBase.

  1. Connectez-vous à SQL Server sur le nœud principal d’un groupe.

  2. Exécutez le sys.dm_exec_compute_nodes DMV (Transact-SQL) pour afficher tous les nœuds du groupe PolyBase.

  3. Exécutez le DMV sys.dm_exec_compute_node_status (Transact-SQL) pour afficher l’état de tous les nœuds du groupe PolyBase.

Haute disponibilité des nœuds de nom Hadoop

De nos jours, PolyBase n’interagit pas avec les services de haute disponibilité des nœuds de nom tels que Zookeeper ou Knox. Toutefois, vous pouvez utiliser une solution de contournement éprouvée pour fournir cette fonctionnalité.

Solution de contournement : utilisez le nom DNS pour rediriger les connexions vers le nœud de nom actif. Pour ce faire, vous devez vous assurer que la source de données externe utilise un nom DNS pour communiquer avec le nom de nœud. Quand le basculement du nom de nœud se produit, vous devez changer l’adresse IP associée au nom DNS utilisé dans la définition de la source de données externe. Cette opération redirige toutes les nouvelles connexions vers le nœud de nom correct. Les connexions existantes échouent quand le basculement se produit. Pour automatiser ce processus, une « pulsation » peut exécuter un ping sur le nom de nœud actif. Si la pulsation échoue, il est à supposer qu’un basculement s’est produit avec un basculement automatiquement vers l’adresse IP des bases de données secondaires.

Emplacements des fichiers journaux

Dans les serveurs Windows, les journaux se trouvent dans le chemin d’accès au répertoire d’installation, par défaut : c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\.

Dans les serveurs Linux, les journaux sont situés par défaut dans /var/opt/mssql/log/polybase.

Fichiers journaux de déplacement des données PolyBase :

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

Fichiers journaux du service de moteur PolyBase :

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

Dans Windows, les fichiers journaux Java PolyBase :

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

Dans Linux, les fichiers journaux Java PolyBase :

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

Messages d’erreur et solutions possibles

Pour des scénarios de dépannage courants, consultez Erreurs PolyBase et solutions possibles.