Övervaka och felsöka PolyBase
gäller för:SQL Server
Om du vill felsöka PolyBase använder du de tekniker som finns i det här avsnittet.
Katalogvyer
Använd katalogvyerna som anges här för att hantera PolyBase-åtgärder.
Utsikt | Beskrivning |
---|---|
sys.external_tables (Transact-SQL) | Identifierar externa tabeller. |
sys.external_data_sources (Transact-SQL) | Identifierar externa datakällor. |
sys.external_file_formats (Transact-SQL) | Identifierar externa filformat. |
Dynamiska hanteringsvyer
PolyBase-frågor delas in i en serie steg inom sys.dm_exec_distributed_request_steps
. Följande tabell innehåller en mappning från stegnamnet till den associerade DMV:en.
PolyBase-steg | Associerad 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 |
Övervaka PolyBase-frågor med DMV:er
Övervaka och felsöka PolyBase-frågor med hjälp av följande DMV:er. Överväg även följande prestandaöverväganden i PolyBase för SQL Server.
Hitta de frågor som körs längst
Registrera körnings-ID:t för den längsta frågan som körs.
-- 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;
Hitta det längsta steget i den distribuerade frågan
Använd körnings-ID:t som registrerades i föregående steg. Registrera stegindexet för det längsta steget som körs.
Kontrollera
location_type
för det längst körande steget:Head eller Compute: innebär en SQL-åtgärd. Fortsätt med steg 3a.
- DMS: innebär en PolyBase Data Movement Service-åtgärd. Fortsätt med steg 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;
Hitta körningsstatusen för det längsta steget som körs
Hitta exekveringsförloppet för ett SQL-steg
Använd körnings-ID och stegindex som registrerats i de föregående stegen.
-- 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;
Hitta körningsstatusen för ett DMS-steg
Använd körnings-ID och stegindex som registrerats i föregående steg.
-- 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;
Hitta information om externa DMS-åtgärder
Använd körnings-ID och stegindex som registrerats i föregående steg.
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;
Visa PolyBase-frågeplanen
I SQL Server 2019 (15.x) kan du visa körningsplanen som skickas till den externa datakällan med hjälp av spårningsflagga 6408. Mer information finns i Så här anger du om en extern nedtryckning har inträffat.
I SQL Server 2016 (13.x) eller SQL Server 2017 (14.x) fungerar den här alternativa strategin:
I SQL Server Management Studio ska du aktivera Inkludera faktisk körningsplan (Ctrl + M) och köra frågan.
Välj fliken Körningsplan.
Högerklicka på operatorn Fjärrfråga och välj Egenskaper.
Kopiera och klistra in värdet Fjärrfråga i en textredigerare för att visa XML-fjärrfrågeplanen. Ett exempel visas nedan.
Taggarna sql_operation
anger åtgärder i SQL Server.
dsql_operations
med operation_types
som inte är "ON" anger de externa operatörer som används av PolyBase Data Movement-tjänsten.
<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>
Övervaka noder i en PolyBase-grupp
När du har konfigurerat en uppsättning datorer som en del av en PolyBase-skalningsgrupp kan du övervaka status för datorerna. För mer information om att skapa en utskalningsgrupp, se PolyBase-utskalningsgrupper.
Anslut till SQL Server på huvudnoden i en grupp.
Kör DMV-sys.dm_exec_compute_nodes (Transact-SQL) för att visa alla noder i PolyBase-gruppen.
Kör DMV-sys.dm_exec_compute_node_status (Transact-SQL) för att visa status för alla noder i PolyBase-gruppen.
Hög tillgänglighet för Hadoop-namnnod
PolyBase samverkar inte med Name Node HA-tjänster som Zookeeper eller Knox idag. Det finns dock en beprövad lösning som kan användas för att tillhandahålla funktionerna.
Lösning: Använd DNS-namn för att omdirigera anslutningar till den aktiva namnnoden. För att kunna göra detta måste du se till att den externa datakällan använder ett DNS-namn för att kommunicera med namnnoden. När failover av Namnnod inträffar måste du ändra IP-adressen som är associerad med DNS-namnet som används i den externa datakällans definition. Då omdirigeras alla nya anslutningar till rätt namnnod. Befintliga anslutningar kommer att misslyckas när failover inträffar. För att automatisera den här processen kan ett "pulsslag" pinga den aktiva namnnoden. Om hjärtats slag misslyckas kan man anta att en övergång har inträffat och automatiskt växla till IP-adressen för sekundära.
Loggfilsplatser
I Windows-servrar finns loggarna som standard i standardsökvägen för installationskatalogen: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
I Linux-servrar finns loggarna som standard i /var/opt/mssql/log/polybase
.
PolyBase-loggfiler för dataflytt:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
Tjänstloggfiler för PolyBase-motorn:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
I Windows-miljön, PolyBase Java-loggfiler:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
I Linux, PolyBase Java-loggfiler:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Felmeddelanden och möjliga lösningar
Vanliga felsökningsscenarier finns i PolyBase-fel och möjliga lösningar.