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.
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;
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;
Sprawdź postęp wykonywania najdłużej trwającego kroku
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;
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;
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:
W programie SQL Server Management Studio zaznacz opcję Uwzględnij rzeczywisty plan wykonania (Ctrl + M) i uruchom zapytanie.
Wybierz kartę plan wykonywania.
Kliknij prawym przyciskiem myszy na operatorze Zapytania Zdalnego i wybierz Właściwości .
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.
Połącz się z programem SQL Server w węźle głównym grupy.
Uruchom DMV sys.dm_exec_compute_nodes (Transact-SQL), aby wyświetlić wszystkie węzły w grupie PolyBase.
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.