Langue

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.

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

Les requêtes PolyBase sont divisées en une série d’étapes dans sys.dm_exec_distributed_request_steps. Le tableau suivant établit une correspondance entre le nom de l’étape et la DMV associée.

Étape de PolyBase 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 des vues de gestion dynamique (DMV)

Surveillez et dépannez les requêtes PolyBase à l’aide des 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’élément location_type de l’étape d’exécution la 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 Inclure le plan d’exécution réel (Ctrl + M) et exécutez la requête.

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

    Capture d’écran de SQL Server Management Studio d’un plan d’exécution de requête PolyBase.

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

  4. Copiez et collez la valeur Remote Query dans un éditeur de texte pour afficher le plan de requête distante XML. Un exemple est présenté ci-dessous.

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

<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 la DMV sys.dm_exec_compute_nodes (Transact-SQL) pour afficher tous les nœuds dans le groupe PolyBase.

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

Haute disponibilité du NameNode Hadoop

À ce jour, PolyBase ne s’interface pas avec les services HA de Name Node comme ZooKeeper ou Knox. Toutefois, vous pouvez utiliser une solution de contournement éprouvée pour fournir cette fonctionnalité.

Solution de contournement : Cette solution consiste à utiliser le nom DNS pour rediriger les connexions vers le nom de nœud 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. Lorsqu’un basculement du nœud de nom se produit, vous devez modifier 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, un « signal de pulsation » peut envoyer un ping au nœud de noms actif. Si le signal de pulsation est interrompu, on peut supposer qu’un basculement a eu lieu et basculer automatiquement vers l’adresse IP du serveur secondaire.

Emplacement 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\.

Sur les serveurs Linux, les fichiers journaux se trouvent 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 moteur PolyBase :

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

Sous Windows, les fichiers journaux Java de PolyBase :

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

Sous Linux, les fichiers journaux Java de 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.