Partilhar via


Monitorar e solucionar problemas do PolyBase

Aplica-se a:SQL Server

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

Visualizações do catálogo

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

Visã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.

Visualizações de gerenciamento dinâmico

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

Etapa PolyBase Detran 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

Monitorizar consultas PolyBase usando DMVs

Monitore e solucione problemas de consultas PolyBase usando os seguintes DMVs. Considere também as seguintes considerações de desempenho no PolyBase para SQL Server.

  1. Encontre as consultas mais antigas

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

     -- 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. Encontre o passo mais longo da execução da consulta distribuída

    Use o ID de execução registrado na etapa anterior. Registre o índice de etapas da etapa de execução mais longa.

    Confira a location_type da etapa mais longa:

    • Head ou Compute: implica uma operação SQL. Prossiga com o Passo 3a.

      • DMS: implica uma operação do PolyBase Data Movement Service. Prossiga com o Passo 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. Encontre o progresso da execução da etapa mais longa

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

      Use o ID de execução e o índice de etapas 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. Encontre o progresso da execução de uma etapa do DMS

      Use o ID de execução e o índice de etapas 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. Encontre as informações sobre operações DMS externas

    Use o ID de execução e o índice de etapas 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 empurrão para baixo externo.

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

  1. No SQL Server Management Studio, selecione 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 PolyBase.

  3. Clique com o botão direito do rato no operador Remote Query e selecione Propriedades.

  4. Copie e cole o valor de Consulta Remota num editor de texto para visualizar o plano de consulta remota 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>  

Monitorizar nós num grupo PolyBase

Depois de configurar um conjunto de máquinas como parte de um grupo de expansão do PolyBase, você pode monitorar o status das máquinas. Para obter detalhes sobre como criar um grupo de expansão, consulte grupos de expansão 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 visualizar todos os nós no Grupo PolyBase.

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

Alta disponibilidade do NameNode do Hadoop

No momento, o PolyBase não faz interface com serviços de alta disponibilidade do Name Node, como o Zookeeper ou o Knox. No entanto, há uma solução alternativa comprovada que pode ser usada para fornecer a funcionalidade.

Solução alternativa: use o nome DNS para redirecionar conexões para NomeNode 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 Name Node, será necessário alterar o endereço IP associado ao nome DNS usado na definição da fonte externa de dados. Isso redirecionará todas as novas conexões para o Nó de Nome correto. As ligações existentes falharão quando ocorrer uma falha de transferência. Para automatizar esse processo, uma "pulsação" pode executar ping no nó de nome ativo. Se o batimento cardíaco falhar, pode-se assumir que ocorreu um failover e mudar automaticamente para o endereço IP secundário.

Locais dos arquivos de log

Nos 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 do PolyBase:

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

Arquivos de log de serviço do mecanismo PolyBase:

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

No Windows, os arquivos de log Java do PolyBase:

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

No Linux, os arquivos de log Java do PolyBase:

  • /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 comuns de solução de problemas, consulte PolyBase Errors and Possible Solutions.