Monitorare e risolvere i problemi relativi a PolyBase
Si applica a: SQL Server
Per risolvere i problemi relativi a PolyBase, usare le tecniche illustrate in questo argomento.
Viste del catalogo
Usare le viste del catalogo elencate di seguito per gestire le operazioni di PolyBase.
Visualizza | Descrizione |
---|---|
sys.external_tables (Transact-SQL) | Identifica le tabelle esterne. |
sys.external_data_sources (Transact-SQL) | Identifica le origini dati esterne. |
sys.external_file_formats (Transact-SQL) | Identifica i formati di file esterni. |
DMV
Le query PolyBase vengono suddivise in una serie di passaggi all'interno di sys.dm_exec_distributed_request_steps
. Nella tabella seguente è illustrato il mapping tra il nome del passaggio per la vista a gestione dinamica associata.
Passaggio PolyBase | Vista a gestione dinamica associata |
---|---|
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 |
Monitorare le query di PolyBase con DMV
Per eseguire il monitoraggio e risolvere i problemi relativi alle query di PolyBase, usare le viste DMV seguenti. Considerare anche le considerazioni sulle prestazioni seguenti in PolyBase per SQL Server.
Individuare le query con il tempo di esecuzione più lungo
Prendere nota dell'ID esecuzione della query con il tempo di esecuzione più lungo.
-- 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;
Individuare il passaggio della query distribuita con il tempo di esecuzione più lungo
Usare l'ID esecuzione annotato nel passaggio precedente. Prendere nota dell'indice del passaggio con il tempo di esecuzione più lungo.
Verificare il valore di
location_type
per il passaggio con il tempo di esecuzione più lungo:Head o Compute: implica un'operazione SQL. Procedere con il passaggio 3a.
- DMS: implica un'operazione di PolyBase Data Movement Service. Procedere con il passaggio 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;
Individuare lo stato di esecuzione del processo con tempo di esecuzione più lungo
Individuare lo stato di esecuzione di un passaggio SQL
Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.
-- 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;
Individuare lo stato di esecuzione di un passaggio DMS
Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.
-- 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;
Individuare le informazioni su operazioni DMS esterne
Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.
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;
Visualizzare il piano di query di PolyBase
In SQL Server 2019 (15.x) è possibile visualizzare il piano di esecuzione passato all'origine dati esterna usando il flag di traccia 6408. Per altre informazioni, vedere Come stabilire se si è verificato un pushdown esterno.
In SQL Server 2016 (13.x) o SQL Server 2017 (14.x), questa strategia alternativa funziona:
In SQL Server Management Studio, abilitare Includi piano di esecuzione effettivo (CTRL+M) ed eseguire la query.
Selezionare la scheda Piano di esecuzione.
Fare clic con il pulsante destro del mouse sull' operatore Remote Query e selezionare Proprietà.
Copiare e incollare il valore di Remote Query in un editor di testo per visualizzare il piano di query remota XML. Di seguito è illustrato un esempio.
I tag sql_operation
indicano operazioni all'interno di SQL Server. dsql_operations
con operation_types
che non sono "ON" indicano gli operatori esterni usati dal servizio 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>
Monitorare i nodi in un gruppo PolyBase
Dopo aver configurato un set di computer come appartenenti al gruppo con scalabilità orizzontale PolyBase, è possibile eseguire il monitoraggio dello stato dei computer. Per informazioni dettagliate sulla creazione di un gruppo con scalabilità orizzontale, vedere Gruppi con scalabilità orizzontale di PolyBase.
Connettersi a SQL Server sul nodo head di un gruppo.
Eseguire DMV sys.dm_exec_compute_nodes (Transact-SQL) per visualizzare tutti i nodi del gruppo PolyBase.
Eseguire DMV sys.dm_exec_compute_node_status (Transact-SQL) per visualizzare lo stato di tutti i nodi del gruppo PolyBase.
Disponibilità elevata del nodo del nome Hadoop
PolyBase non interagisce con i servizi Name Node HA come Zookeeper o Knox. Tuttavia, esiste una soluzione alternativa comprovata che può essere usata per realizzare la funzionalità.
Soluzione alternativa: utilizzare il nome DNS per reindirizzare le connessioni al Name Node attivo. A questo scopo, è necessario assicurarsi che l'origine dati esterna utilizzi un nome DNS per comunicare con il Name Node. Quando si verifica un failover del Name Node, è necessario modificare l'indirizzo IP associato al nome DNS utilizzato nella definizione dell'origine dati esterna. Ciò reindirizza tutte le nuove connessioni al Name Node corretto. Le connessioni esistenti avranno esito negativo quando si verifica il failover. Per automatizzare questo processo, un "heartbeat" può eseguire il ping del Name Node attivo. Se si verifica un errore di heartbeat, si può presupporre che si sia verificato un failover e si può passare automaticamente all'indirizzo IP secondario.
Percorsi dei file di registro
Nei server Windows, i log si trovano nel percorso della directory di installazione, per impostazione predefinita: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
Nei server Linux, i log si trovano per impostazione predefinita in /var/opt/mssql/log/polybase
.
File di log di PolyBase Data Movement:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
File di log del servizio del motore PolyBase:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
In Windows, file di log Java PolyBase:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
In Linux, file di log Java PolyBase:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Messaggi di errore e possibili soluzioni
Per suggerimenti comuni sulla risoluzione dei problemi, vedere Errori di PolyBase e possibili soluzioni