PolyBase bewaken en problemen oplossen
van toepassing op:SQL Server-
Gebruik de technieken in dit onderwerp om problemen met PolyBase op te lossen.
Catalogusweergaven
Gebruik de catalogusweergaven die hier worden vermeld om PolyBase-bewerkingen te beheren.
Bekijken | Beschrijving |
---|---|
sys.external_tables (Transact-SQL) | Identificeert externe tabellen. |
sys.external_data_sources (Transact-SQL) | Identificeert externe gegevensbronnen. |
sys.external_file_formats (Transact-SQL) | Identificeert externe bestandsindelingen. |
Dynamische beheerweergaven
PolyBase-query's worden onderverdeeld in een reeks stappen binnen sys.dm_exec_distributed_request_steps
. De volgende tabel biedt een koppeling van de stapnaam naar de bijbehorende DMV.
PolyBase-stap | Gekoppelde 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 |
PolyBase-query's monitoren met DMV's
Bewaak en los problemen met PolyBase-query's op met behulp van de volgende DMV's. Houd ook rekening met de volgende prestatieoverwegingen in PolyBase voor SQL Server.
de langst lopende query's zoeken
Noteer de uitvoerings-id van de langst lopende query.
-- 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;
de langst lopende stap van de gedistribueerde query zoeken
Gebruik de uitvoerings-id die in de vorige stap is vastgelegd. Noteer de stapindex van de langst lopende stap.
Controleer de
location_type
van de langstlopende stap:Head of Compute: impliceert een SQL-bewerking. Ga verder met stap 3a.
- DMS: impliceert een PolyBase Data Movement Service-bewerking. Ga verder met stap 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;
de uitvoeringsvoortgang van de langstlopende stap zoeken
De uitvoeringsvoortgang van een SQL-stap zoeken
Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.
-- 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;
de uitvoeringsvoortgang van een DMS-stap zoeken
Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.
-- 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;
de informatie over externe DMS-bewerkingen zoeken
Gebruik de uitvoerings-id en stapindex die in de vorige stappen zijn vastgelegd.
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;
Het PolyBase-queryplan weergeven
In SQL Server 2019 (15.x) kunt u het uitvoeringsplan bekijken dat is doorgegeven aan de externe gegevensbron met traceringsvlag 6408. Zie Hoe u kunt zien of externe pushdown heeft plaatsgevondenvoor meer informatie.
In SQL Server 2016 (13.x) of SQL Server 2017 (14.x) werkt deze alternatieve strategie:
Schakel in SQL Server Management Studio de optie Werkelijke uitvoeringsplan weergave (Ctrl + M) in en voer de query uit.
Selecteer het tabblad Uitvoeringsplan.
Klik met de rechtermuisknop op de operator Externe query en selecteer Eigenschappen.
Kopieer en plak de externe query waarde in een teksteditor om het externe XML-queryplan weer te geven. Hieronder ziet u een voorbeeld.
De sql_operation
tags geven bewerkingen in SQL Server aan. De dsql_operations
met operation_types
die niet 'AAN' zijn, geven de externe operators aan die worden gebruikt door de PolyBase Data Movement-service.
<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>
Knooppunten in een PolyBase-groep bewaken
Nadat u een set machines hebt geconfigureerd als onderdeel van een PolyBase-uitschaalgroep, kunt u de status van de machines bewaken. Voor meer informatie over het maken van een schaal-uit-groep, zie PolyBase-schaal-uit-groepen.
Maak verbinding met SQL Server op het hoofdknooppunt van een groep.
Voer DMV-sys.dm_exec_compute_nodes (Transact-SQL) uit om alle knooppunten in de PolyBase-groep weer te geven.
Voer DMV sys.dm_exec_compute_node_status (Transact-SQL) uit om de status van alle knooppunten in de PolyBase-groep weer te geven.
Hoge beschikbaarheid van Hadoop-naamknooppunt
PolyBase maakt momenteel geen interface met Name Node HA-services zoals Zookeeper of Knox. Er is echter een bewezen tijdelijke oplossing die kan worden gebruikt om de functionaliteit te bieden.
Tijdelijke oplossing: gebruik de DNS-naam om verbindingen om te leiden naar het actieve naamknooppunt. Om dit te doen, moet u ervoor zorgen dat de externe gegevensbron een DNS-naam gebruikt om te communiceren met het naamknooppunt. Wanneer failover van het naamknooppunt optreedt, moet u het IP-adres wijzigen dat is gekoppeld aan de DNS-naam die wordt gebruikt in de definitie van de externe gegevensbron. Hiermee worden alle nieuwe verbindingen omgeleid naar het juiste naamknooppunt. Bestaande verbindingen mislukken wanneer de failover plaatsvindt. Om dit proces te automatiseren, kan een "heartbeat" het actieve Name Node pingen. Als de heart beat mislukt, kan men aannemen dat er een failover is opgetreden en automatisch overschakelt naar het IP-adres van de secundaire database.
Locaties van logboekbestanden
Op Windows-servers bevinden de logboeken zich standaard in het pad naar de installatiemap: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
Op Linux-servers bevinden de logboeken zich standaard in /var/opt/mssql/log/polybase
.
Logboekbestanden voor PolyBase-gegevensverplaatsing:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
Logboekbestanden van de PolyBase-engineservice:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
In Windows, PolyBase Java-logboekbestanden:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
In Linux, PolyBase Java-logboekbestanden:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Foutberichten en mogelijke oplossingen
Zie PolyBase-fouten en mogelijke oplossingenvoor veelvoorkomende scenario's voor probleemoplossing.