Udostępnij za pośrednictwem


Monitorowanie i rozwiązywanie problemów z technologią PolyBase

Dotyczy:programu SQL Server

Aby rozwiązać problemy z technologią PolyBase, skorzystaj z technik znalezionych w tym temacie.

Widoki wykazu

Użyj widoków wykazu wymienionych tutaj, aby zarządzać operacjami programu PolyBase.

Widok Opis
sys.external_tables (Transact-SQL) Identyfikuje tabele zewnętrzne.
sys.external_data_sources (Transact-SQL) Identyfikuje zewnętrzne źródła danych.
sys.external_file_formats (Transact-SQL) Identyfikuje formaty plików zewnętrznych.

Dynamiczne widoki zarządzania

Zapytania polyBase są podzielone na serię kroków w sys.dm_exec_distributed_request_steps. Poniższa tabela zawiera mapowanie z nazwy kroku do skojarzonego dynamicznego widoku zarządzania.

Krok programu PolyBase Powiązany 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

Monitorowanie zapytań programu PolyBase przy użyciu widoków DMV

Monitorowanie i rozwiązywanie problemów z zapytaniami programu PolyBase przy użyciu następujących widoków DMV. Rozważ również następujące zagadnienia dotyczące wydajności w programie PolyBase dla programu SQL Server.

  1. Znajdź najdłużej działające zapytania

    Zarejestruj identyfikator wykonania najdłużej działającego zapytania.

     -- 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. Znajdź najdłuższy krok zapytania rozproszonego

    Użyj identyfikatora wykonania zarejestrowanego w poprzednim kroku. Zarejestruj indeks najdłużej działającego kroku.

    Sprawdź location_type najdłużej działającego kroku:

    • Head lub Compute: oznacza operację SQL. Przejdź do kroku 3a.

      • DMS: oznacza operację usługi PolyBase Data Movement Service. Przejdź do kroku 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. Sprawdź postęp wykonywania najdłużej trwającego kroku

    1. Znajdowanie postępu wykonywania kroku SQL

      Użyj identyfikatora wykonania i indeksu kroku zarejestrowanego w poprzednich krokach.

      -- 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. Znajdowanie postępu wykonywania kroku usługi DMS

      Użyj identyfikatora wykonania oraz indeksu kroku, które zostały zarejestrowane w poprzednich krokach.

      -- 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. Znajdowanie informacji o zewnętrznych operacjach usługi DMS

    Użyj identyfikatora wykonania i indeksu kroku zarejestrowanych w poprzednich krokach.

    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;  
    

Wyświetlanie planu zapytania programu PolyBase

W programie SQL Server 2019 (15.x) można wyświetlić plan wykonywania przekazany do zewnętrznego źródła danych przy użyciu flagi śledzenia 6408. Aby uzyskać więcej informacji, zobacz Jak sprawdzić, czy wystąpiło zewnętrzne dociążenie.

W programie SQL Server 2016 (13.x) lub SQL Server 2017 (14.x) ta alternatywna strategia działa:

  1. W programie SQL Server Management Studio zaznacz opcję Uwzględnij rzeczywisty plan wykonania (Ctrl + M) i uruchom zapytanie.

  2. Wybierz kartę plan wykonywania.

    zrzut ekranu z programu SQL Server Management Studio planu wykonywania zapytań programu PolyBase.

  3. Kliknij prawym przyciskiem myszy na operatorze Zapytania Zdalnego i wybierz Właściwości .

  4. Skopiuj i wklej wartość Zapytanie zdalne do edytora tekstów, aby wyświetlić plan zapytania zdalnego XML. Poniżej przedstawiono przykład.

Tagi sql_operation wskazują operacje w programie SQL Server. dsql_operations z operation_types, które nie są "WŁĄCZONE", wskazują zewnętrznych operatorów używanych przez usługę 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>  

Monitorowanie węzłów w grupie programu PolyBase

Po skonfigurowaniu zestawu maszyn w ramach grupy rozproszonej PolyBase można monitorować stan tych maszyn. Aby uzyskać szczegółowe informacje na temat tworzenia grupy skalowania w poziomie, zobacz grupy skalowania poziomego PolyBase.

  1. Połącz się z programem SQL Server w węźle głównym grupy.

  2. Uruchom DMV sys.dm_exec_compute_nodes (Transact-SQL), aby wyświetlić wszystkie węzły w grupie PolyBase.

  3. Uruchom sys.dm_exec_compute_node_status DMV (Transact-SQL), aby wyświetlić stan wszystkich węzłów w grupie PolyBase.

Wysoka dostępność węzła nazw Hadoop

Technologia PolyBase obecnie nie interfejsuje się z usługami Name Node HA, takimi jak Zookeeper lub Knox. Istnieje jednak sprawdzone obejście, które może służyć do zapewnienia funkcjonalności.

Obejście: Użyj nazwy DNS, aby przekierować połączenia do aktywnego węzła nazwy. Aby to zrobić, należy upewnić się, że zewnętrzne źródło danych używa nazwy DNS do komunikowania się z Węzłem Nazw. W przypadku przejścia w tryb failover węzła nazwy należy zmienić adres IP skojarzony z nazwą DNS używaną w definicji zewnętrznego źródła danych. Spowoduje to przekierowanie wszystkich nowych połączeń do poprawnego węzła nazwy. Istniejące połączenia kończą się niepowodzeniem po przejściu w tryb failover. Aby zautomatyzować ten proces, "puls" może wysłać polecenie ping do aktywnego NameNode. Jeśli puls ulegnie awarii, można założyć, że nastąpiło przełączenie w tryb failover i automatyczne przełączenie się na adres IP drugiego dziennika.

Lokalizacje plików dziennika

Na serwerach z systemem Windows dzienniki znajdują się w ścieżce katalogu instalacyjnego domyślnie: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\.

Na serwerach z systemem Linux dzienniki znajdują się domyślnie w /var/opt/mssql/log/polybase.

Pliki dziennika przenoszenia danych polyBase:

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

Pliki dziennika usługi silnika PolyBase

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

W systemie Windows pliki dziennika języka Java programu PolyBase:

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

W systemie Linux pliki dziennika języka Java programu PolyBase:

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

Komunikaty o błędach i możliwe rozwiązania

Aby zapoznać się z typowymi scenariuszami rozwiązywania problemów, zobacz błędy technologii PolyBase i możliwe rozwiązania.