Поделиться через


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

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

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

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

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

Вид Описание
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 с помощью динамических управляющих представлений (DMVs)

Используйте следующие динамические административные представления (DMVs) для мониторинга и устранения неполадок с запросами 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. Поля dsql_operations с operation_types, которые не в состоянии "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. Запустите DMV sys.dm_exec_compute_nodes (Transact-SQL), чтобы просмотреть все узлы PolyBase-группы.

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

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

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

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