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나뉩니다. 다음 표에서는 단계 이름에서 연결된 DMV로의 매핑을 제공합니다.

PolyBase 단계 연결된 DMV
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

DMV를 사용하여 PolyBase 쿼리 모니터링

다음 DMV를 사용하여 PolyBase 쿼리를 모니터링하고 문제를 해결합니다. SQL Server용 PolyBase의 다음 성능 고려 사항도 고려합니다.

  1. 가장 오래 실행되는 쿼리 찾기

    가장 오래 실행되는 쿼리의 실행 ID를 기록합니다.

     -- 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. 분산 쿼리의 가장 긴 실행 단계 찾기

    이전 단계에서 기록된 실행 ID를 사용하여 가장 긴 실행 단계의 단계 인덱스 기록

    location_type 가장 긴 실행 단계를 확인합니다.

    • Head 또는 Compute: 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 단계의 실행 진행률 찾기

      이전 단계에서 기록된 실행 ID 및 단계 인덱스 사용

      -- 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 단계의 실행 진행률 찾기

      이전 단계에서 기록된 실행 ID 및 단계 인덱스 사용

      -- 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 작업에 대한 정보 찾기

    이전 단계에서 기록된 실행 ID 및 단계 인덱스 사용

    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을 사용하여 외부 데이터 원본에 전달된 실행 계획을 볼 수 있습니다. 자세한 내용은 외부 푸시다운이 발생했는지를 확인하는 방법을 참조하세요.

SQL Server 2016(13.x) 또는 SQL Server 2017(14.x)에서 이 대체 전략은 다음과 같이 작동합니다.

  1. SQL Server Management Studio에서 실제 실행 계획 포함(Ctrl + M)을 사용하도록 설정하고 쿼리를 실행합니다.

  2. 실행 계획 탭을 선택합니다.

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

  3. 원격 쿼리 연산자를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  4. 원격 쿼리 값을 복사하여 텍스트 편집기에 붙여넣어 XML 원격 쿼리 계획을 봅니다. 아래에 예제가 나와 있습니다.

태그는 sql_operation SQL Server 내의 작업을 나타냅니다. operation_types"ON"이 아닌 경우 dsql_operations 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_상태(Transact-SQL)를 실행하여 PolyBase 그룹에 있는 모든 노드의 상태 확인합니다.

Hadoop 이름 노드 고가용성

PolyBase는 현재 Zookeeper 또는 Knox와 같은 이름 노드 HA 서비스와 인터페이스하지 않습니다. 하지만 기능을 제공하는 데 사용할 수 있는 검증된 해결 방법이 있습니다.

해결 방법: DNS 이름을 사용하여 활성 이름 노드에 대한 연결을 다시 라우팅합니다. 이렇게 하려면 외부 데이터 원본이 DNS 이름을 사용하여 이름 노드와 통신하는지 확인해야 합니다. 이름 노드 장애 조치(failover)가 발생하면 외부 데이터 원본 정의에 사용된 DNS 이름과 연결된 IP 주소를 변경해야 합니다. 그러면 모든 새 연결이 올바른 이름 노드로 다시 라우팅됩니다. 장애 조치(failover)가 발생하면 기존 연결이 실패합니다. 이 프로세스를 자동화하기 위해 "하트비트"는 활성 이름 노드를 ping할 수 있습니다. 심장 박동이 실패하면 장애 조치(failover)가 발생했다고 가정하고 보조 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

Windows에서 PolyBase Java 로그 파일:

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

Linux에서 PolyBase Java 로그 파일:

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

오류 메시지 및 가능한 해결 방법

일반적인 문제 해결 시나리오는 PolyBase 오류 및 가능한 솔루션을 참조 하세요.