Monitorar e solucionar problemas do PolyBase

Aplica-se a:SQL Server

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

Exibições do catálogo

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

Exibição 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 fornece um mapeamento do nome da etapa ao 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. Inclua também as seguintes considerações de desempenho no PolyBase para SQL Server.

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

    Registre a ID de execução da consulta mais longa em execução.

     -- 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 a etapa mais longa em execução.

    Verifique location_type da etapa mais longa em execução:

    • Cabeçalho ou cálculo: implica uma operação de 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. Localizar as informações sobre operações de DMS externas

    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 visualizar o plano de execução passado para a fonte de dados externa com o sinalizador de rastreamento 6408. Para obter mais informações, confira 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.

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

  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. As dsql_operations com operation_types que não estão "ATIVADOS" indicam os operadores externos usados pelo serviço de Movimentação de Dados 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>  

Monitorar nós em um grupo de 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 escala horizontal, veja Grupos de escala 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 nó de nome do Hadoop

O PolyBase não estabelece uma interface com os serviços de HA do nó de nome como o Zookeeper ou o Knox atualmente. No entanto, há uma solução comprovada que pode ser usada para fornecer a funcionalidade.

Solução alternativa: use o nome DNS para redirecionar conexões para o nó de nome ativo. Para fazer isso, você precisará garantir que a fonte de dados externa esteja usando um nome DNS para se comunicar com o nó de nome. Quando ocorrer o failover do nó de nome, você precisará alterar o endereço IP associado ao nome DNS usado na definição de fonte de dados externa. Isso redirecionará todas as novas conexões para o nó de nome correto. As conexões existentes falharão quando ocorrer failover. Para automatizar esse processo, uma "pulsação" pode executar o ping no nó de nome 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.