Мониторинг PolyBase и устранение неполадок

Область применения: SQL Server

В этом разделе описаны методы по устранению неполадок с PolyBase.

Представления каталога

Ниже приведены представления каталога,с помощью которых можно управлять операциями PolyBase.

Представления Description
sys.external_tables (Transact-SQL) Определяет внешние таблицы
sys.external_data_sources (Transact-SQL) Определяет источники внешних таблиц
sys.external_file_formats (Transact-SQL) Определяет форматы внешних файлов

Динамические административные представления

Запросы PolyBase разбиваются на ряд шагов в пределах sys.dm_exec_distributed_request_steps. В следующей таблице приводится сопоставление имен шагов и динамических административных представлений.

Шаг PolyBase Связанное динамическое административное представление
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

Мониторинг запросов PolyBase с помощью динамических представлений

Здесь описаны динамические административные представления, которые можно использовать для мониторинга и устранения неполадок с запросами PolyBase. Рассмотрите также следующие рекомендации по повышению производительности в PolyBase для SQL Server.

  1. Поиск запросов с наиболее длительным временем выполнения.

    Запишите идентификатор выполнения запроса с наиболее длительным временем выполнения.

     -- 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. Поиск действия распределенного запроса с наиболее длительным временем выполнения.

    Используйте идентификатор выполнения, записанный при выполнении предыдущего действия. Запишите индекс действия с наиболее длительным временем выполнения.

    location_type Проверьте самый длинный этап выполнения:

    • Головной или вычислительный: подразумевается операция SQL. Перейдите к шагу 3a.

      • DMS: подразумевается операция службы перемещения данных PolyBase. Перейдите к шагу 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. Поиск данных о ходе выполнения действия с наиболее длительным временем выполнения.

    1. Поиск данных о ходе выполнения действия SQL.

      Используйте идентификатор выполнения и индекс действия, записанные при выполнении предыдущих действий.

      -- 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. Поиск данных о ходе выполнения действия DMS.

      Используйте идентификатор выполнения и индекс действия, записанные при выполнении предыдущих действий.

      -- 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. Поиск сведений о внешних операциях DMS.

    Используйте идентификатор выполнения и индекс действия, записанные при выполнении предыдущих действий.

    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;  
    

Просмотр плана запросов PolyBase

В SQL Server 2019 (15.x) можно просмотреть план выполнения, переданный внешнему источнику данных с помощью флага трассировки 6408. Дополнительные сведения см. в разделе Как определить, произошел ли внешний pushdown.

В SQL Server 2016 (13.x) или SQL Server 2017 (14.x) эта альтернативная стратегия работает:

  1. В СРЕДЕ SQL Server Management Studio включите фактический план выполнения (CTRL+M) и выполните запрос.

  2. Перейдите на вкладку "План выполнения".

    Снимок экрана: СРЕДА SQL Server Management Studio плана выполнения запросов PolyBase.

  3. Щелкните правой кнопкой мыши оператор Удаленный запрос и выберите пункт Свойства.

  4. Скопируйте и вставьте значение удаленного запроса в текстовый редактор, чтобы просмотреть план удаленного запроса XML. Ниже приведен соответствующий пример.

Теги sql_operation указывают операции в SQL Server. operation_types В этом dsql_operations поле не указано значение ON, указывающее внешние операторы, используемые службой перемещения данных 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>  

Мониторинг узлов в группе PolyBase

После настройки нескольких компьютеров в рамках группы горизонтального увеличения масштаба PolyBase можно отслеживать состояние компьютеров. Дополнительные сведения о создании группы горизонтального увеличения масштаба см. в разделе Группы горизонтального увеличения масштаба PolyBase.

  1. Подключитесь к SQL Server на головном узле группы.

  2. Запустите sys.dm_exec_compute_nodes dmV (Transact-SQL), чтобы просмотреть все узлы в группе PolyBase.

  3. Запустите sys.dm_exec_compute_node_status dmV (Transact-SQL), чтобы просмотреть состояние всех узлов в группе PolyBase.

Высокий уровень доступности узла имени Hadoop

Сегодня PolyBase не взаимодействует со службами высокой доступности узла имени, такими как Zookeeper или Knox. Однако есть проверенное решение, которое можно использовать для обеспечения функциональности.

Обходной путь. Используйте DNS-имя для перенаправки подключений к активному узлу имен. Для этого необходимо, чтобы для взаимодействия с узлом внешний источник данных использовал DNS-имя. При возникновении отработки отказа следует изменить IP-адрес, связанный с DNS-именем, используемым в определении внешнего источника данных. В результате все новые соединения будут перенаправляться на соответствующий узел имени. В случае отработки существующие подключения завершатся ошибкой. Чтобы автоматизировать этот процесс, периодический сигнал может проверить связь с активным узлом имени. Если периодический сигнал завершается ошибкой, можно предположить, что возникла отработка отказа, и автоматически переключиться на IP-адреса дополнительных серверов.

Расположение файлов журналов

На серверах Windows журналы находятся в пути к каталогу установки по умолчанию: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\

На серверах Linux журналы расположены по умолчанию /var/opt/mssql/log/polybase.

Файлы журналов перемещения данных PolyBase:

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

Файлы журналов службы ядра PolyBase:

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

Файлы журналов Java для PolyBase (в Windows):

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

Файлы журналов Java для PolyBase (в Linux):

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

Сообщения об ошибках и возможные решения

Распространенные сценарии устранения неполадок см. в статье Ошибки в PolyBase и возможные решения.