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

Pour surveiller les requêtes PolyBase à l’aide des vues 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’é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;  
    

Pour consulter le plan de requête PolyBase

Dans SQL Server 2019 (15.x), vous pouvez consulter le plan d’exécution passé à 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 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. Voici un exemple de .

Les balises sql_operation indiquent les opérations dans SQL Server. Les opérations dsql_operations avec des valeurs operation_types qui ne sont pas « ON » (Activées) indiquent les opérateurs externes utilisés par le service Mouvement de 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>  

Pour surveiller des 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é 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 : 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. 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 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 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.