Idioma

Monitorar e solucionar problemas do PolyBase

Aplica-se:SQL Server

Para solucionar problemas do PolyBase, use as técnicas encontradas neste tópico.

Visualizações do catálogo

Use as exibições do catálogo listadas aqui para gerenciar as operações de PolyBase.

Visualizar Descrição
sys.external_tables (Transact-SQL) Identifica tabelas externas.
sys.external_data_sources (Transact-SQL) Identifica fontes de dados externas.
sys.external_file_formats (Transact-SQL) Identifica formatos de arquivo externos.

Exibições de gerenciamento dinâmico

As consultas do PolyBase são divididas em uma série de etapas dentro do sys.dm_exec_distributed_request_steps. A tabela a seguir apresenta um mapeamento entre o nome da etapa e o DMV associado.

Etapa do PolyBase DMV associado
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

Monitorar consultas do PolyBase usando DMVs

Monitorar e solucionar problemas de consultas do PolyBase usando as DMVs a seguir. Considere também as seguintes considerações de desempenho no PolyBase para SQL Server.

  1. Localizar as consultas mais longas em execução

    Registre o ID de execução da consulta em execução há mais tempo.

     -- 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. Localize a etapa de execução mais longa da consulta distribuída

    Use a ID de execução registrada na etapa anterior. Registre o índice da etapa em execução há mais tempo.

    Verifique o location_type da etapa em execução há mais tempo:

    • Head ou Compute: implica uma operação SQL. Vá para a etapa 3a.

      • DMS: implica uma operação de serviço de movimentação de dados do PolyBase. Vá para a etapa 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. Registre o andamento da execução da etapa de execução mais longa

    1. Localizar o andamento da execução de uma etapa SQL

      Use a ID de execução e o índice de etapa registrados nas etapas anteriores.

      -- 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. Localizar o andamento da execução de uma etapa DMS

      Use a ID de execução e o índice de etapa registrados nas etapas anteriores.

      -- 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. Encontrar as informações sobre operações externas do DMS

    Use a ID de execução e o índice de etapa registrados nas etapas anteriores.

    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;  
    

Exibir o plano de consulta do PolyBase

No SQL Server 2019 (15.x), você pode exibir o plano de execução passado para a fonte de dados externa usando o sinalizador de rastreamento 6408. Para obter mais informações, consulte Como saber se ocorreu um pushdown externo.

No SQL Server 2016 (13.x) ou SQL Server 2017 (14.x), a seguinte estratégia alternativa funciona:

  1. No SQL Server Management Studio, habilite Incluir Plano de Execução Real (Ctrl + M) e execute a consulta.

  2. Selecione a guia Plano de execução.

    Captura de tela do SQL Server Management Studio de um plano de execução de consulta do PolyBase.

  3. Clique com o botão direito do mouse no Operador de Consulta Remota e selecione Propriedades.

  4. Copie e cole o valor da consulta remota em um editor de texto para exibir o plano de consulta remota de XML. Um exemplo é mostrado abaixo.

As marcas sql_operation indicam operações no SQL Server. Os dsql_operations com operation_types que não estão "ON" indicam os operadores externos usados pelo serviço PolyBase Data Movement.

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

Monitorar nós de um grupo do PolyBase

Depois de configurar um conjunto de computadores como parte de um grupo de escala horizontal do PolyBase, você pode monitorar o status dos computadores. Para obter detalhes sobre como criar um grupo de expansão horizontal, consulte Grupos de expansão horizontal do PolyBase.

  1. Conecte-se ao SQL Server no nó principal de um grupo.

  2. Execute a DMV sys.dm_exec_compute_nodes (Transact-SQL) para exibir todos os nós do Grupo do PolyBase.

  3. Execute a DMV sys.dm_exec_compute_node_status (Transact-SQL) para exibir o status de todos os nós do Grupo do PolyBase.

Alta disponibilidade do NameNode do Hadoop

Atualmente, o PolyBase não tem integração com serviços de alta disponibilidade (HA) do Name Node, como o Zookeeper ou o Knox. No entanto, há uma solução comprovada que pode ser usada para fornecer a funcionalidade.

Solução alternativa: use o nome de DNS para redirecionar conexões para o NameNode ativo. Para fazer isso, você precisará garantir que a Fonte de Dados Externa esteja usando um nome DNS para se comunicar com o NameNode. Quando ocorrer o failover do NameNode, você precisará alterar o endereço IP associado ao nome DNS usado na definição da Fonte de Dados Externa. Isso redirecionará todas as novas conexões para o NameNode adequado. As conexões existentes falharão em caso de failover. Para automatizar esse processo, um "heartbeat" pode enviar um ping ao NameNode ativo. Se a pulsação falha, é possível assumir que um failover ocorreu e alternar automaticamente para o endereço IP secundário.

Localizações do arquivo de log

Em servidores Windows, os logs estão localizados no caminho do diretório de instalação, por padrão: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\.

Em servidores Linux, os logs estão localizados por padrão em /var/opt/mssql/log/polybase.

Arquivos de log de movimentação de dados PolyBase:

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

Arquivos de log do serviço de mecanismo PolyBase:

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

No Windows, os arquivos de log do PolyBase Java:

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

No Linux, os arquivos de log do PolyBase Java:

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

Mensagens de erro e possíveis soluções

Para cenários de solução de problemas comuns, confira Erros do PolyBase e possíveis soluções.