Risoluzione dei problemi di PolyBasePolyBase troubleshooting

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Per risolvere i problemi relativi a PolyBase, usare le tecniche illustrate in questo argomento.To troubleshoot PolyBase, use the techniques found in this topic.

Viste del catalogoCatalog views

Usare le viste del catalogo elencate di seguito per gestire le operazioni di PolyBase.Use the catalog views listed here to manage PolyBase operations.

VistaView DescrizioneDescription
sys.external_tables (Transact-SQL)sys.external_tables (Transact-SQL) Identifica le tabelle esterne.Identifies external tables.
sys.external_data_sources (Transact-SQL)sys.external_data_sources (Transact-SQL) Identifica le origini dati esterne.Identifies external data sources.
sys.external_file_formats (Transact-SQL)sys.external_file_formats (Transact-SQL) Identifica i formati di file esterni.Identifies external file formats.

DMVDynamic Management Views

sys.dm_exec_compute_node_errors (Transact-SQL)sys.dm_exec_compute_node_errors (Transact-SQL) sys.dm_exec_compute_node_status (Transact-SQL)sys.dm_exec_compute_node_status (Transact-SQL)
sys.dm_exec_compute_nodes (Transact-SQL)sys.dm_exec_compute_nodes (Transact-SQL) sys.dm_exec_distributed_request_steps (Transact-SQL)sys.dm_exec_distributed_request_steps (Transact-SQL)
sys.dm_exec_distributed_requests (Transact-SQL)sys.dm_exec_distributed_requests (Transact-SQL) sys.dm_exec_distributed_sql_requests (Transact-SQL)sys.dm_exec_distributed_sql_requests (Transact-SQL)
sys.dm_exec_dms_services (Transact-SQL)sys.dm_exec_dms_services (Transact-SQL) sys.dm_exec_dms_workers (Transact-SQL)sys.dm_exec_dms_workers (Transact-SQL)
sys.dm_exec_external_operations (Transact-SQL)sys.dm_exec_external_operations (Transact-SQL) sys.dm_exec_external_work (Transact-SQL)sys.dm_exec_external_work (Transact-SQL)

Le query PolyBase sono suddivise in una serie di passaggi all'interno di sys.dm_exec_distributed_request_steps.PolyBase queries are broken into a series of steps within sys.dm_exec_distributed_request_steps. Nella tabella seguente è illustrato il mapping tra il nome del passaggio per la vista a gestione dinamica associata.The following table provides a mapping from the step name to the associated DMV.

Passaggio PolyBasePolyBase Step Vista a gestione dinamica associataAssociated DMV
HadoopJobOperationHadoopJobOperation sys.dm_exec_external_operationssys.dm_exec_external_operations
RandomIdOperationRandomIdOperation sys.dm_exec_distributed_request_stepssys.dm_exec_distributed_request_steps
HadoopRoundRobinOperationHadoopRoundRobinOperation sys.dm_exec_dms_workerssys.dm_exec_dms_workers
StreamingReturnOperationStreamingReturnOperation sys.dm_exec_dms_workerssys.dm_exec_dms_workers
OnOperationOnOperation sys.dm_exec_distributed_sql_requestssys.dm_exec_distributed_sql_requests

Per eseguire il monitoraggio delle query di PolyBase con DMVTo monitor PolyBase queries using DMVs

Per eseguire il monitoraggio e risolvere i problemi relativi alle query di PolyBase, usare le viste DMV seguenti.Monitor and troubleshoot PolyBase queries using the following DMVs.

  1. Individuare le query con il tempo di esecuzione più lungoFind the longest running queries

    Prendere nota dell'ID esecuzione della query con il tempo di esecuzione più lungo.Record the execution ID of the longest running 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;  
    
  2. Individuare il passaggio della query distribuita con il tempo di esecuzione più lungoFind the longest running step of the distributed query

    Usare l'ID esecuzione annotato nel passaggio precedente.Use the execution ID recorded in the previous step. Prendere nota dell'indice del passaggio con il tempo di esecuzione più lungo.Record the step index of the longest running step.

    Verificare il valore di location_type per il passaggio con il tempo di esecuzione più lungo:Check the location_type of longest running step:

    • Head o Compute: implica un'operazione SQL.Head or Compute: implies a SQL operation. Procedere con il passaggio 3a.Proceed with Step 3a.

    • DMS: implica un'operazione di PolyBase Data Movement Service.DMS: implies a PolyBase Data Movement Service operation. Procedere con il passaggio 3b.Proceed with Step 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. Individuare lo stato di esecuzione del processo con tempo di esecuzione più lungoFind the execution progress of the longest running step

    1. Individuare lo stato di esecuzione di un passaggio SQLFind the execution progress of a SQL step

      Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.Use the execution ID and step index recorded in the previous steps. Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.Use the execution ID and step index recorded in the previous steps.

      -- 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. Individuare lo stato di esecuzione di un passaggio DMSFind the execution progress of a DMS step

      Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.Use the execution ID and step index recorded in the previous steps.

      -- 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. Individuare le informazioni su operazioni DMS esterneFind the information about external DMS operations

    Usare l'ID esecuzione e l'indice passaggio annotati nei passaggi precedenti.Use the execution ID and step index recorded in the previous steps.

    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;  
    

Per visualizzare il piano di query di PolyBaseTo view the PolyBase query plan

  1. In SSMS abilitare Includi piano di esecuzione effettivo (CTRL+M) ed eseguire la query.In SSMS, enable Include Actual Execution Plan (Ctrl + M) and run the query.

  2. Fare clic sulla scheda Piano di esecuzione .Click the Execution plan tab.

    Piano di query di PolyBasePolyBase query plan

  3. Fare clic con il pulsante destro del mouse sull' operatore Remote Query e selezionare Proprietà.Right-click on the Remote Query operator and select Properties.

  4. Copiare e incollare il valore di Remote Query in un editor di testo per visualizzare il piano di query remota XML.Copy and paste the Remote Query value into a text editor to view the XML remote query plan. Di seguito è riportato un esempio.An example is shown below.

    
    <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://10.193.26.177: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>  
    

Per eseguire il monitoraggio dei nodi in un gruppo PolyBaseTo monitor nodes in a PolyBase group

Dopo aver configurato un set di computer come appartenenti al gruppo con scalabilità orizzontale PolyBase, è possibile eseguire il monitoraggio dello stato dei computer.After configuring a set of machines as part of a PolyBase scale out group, you can monitor the status of the machines. Per informazioni dettagliate sulla creazione di un gruppo con scalabilità orizzontale, vedere Gruppi con scalabilità orizzontale di PolyBase.For details on creating a scale out group, see PolyBase scale-out groups.

  1. Connettersi a SQL Server sul nodo head di un gruppo.Connect to SQL Server on the head node of a group.

  2. Eseguire la vista DMV sys.dm_exec_compute_nodes (Transact-SQL) per visualizzare tutti i nodi del gruppo PolyBase.Run the DMV sys.dm_exec_compute_nodes (Transact-SQL) to view all the nodes in the PolyBase Group.

  3. Eseguire la vista DMV sys.dm_exec_compute_node_status (Transact-SQL) per visualizzare lo stato di tutti i nodi del gruppo PolyBase.Run the DMV sys.dm_exec_compute_node_status (Transact-SQL) to view the status of all the nodes in the PolyBase Group.

    Limitazioni noteKnown Limitations

    PolyBase include le limitazioni seguenti:PolyBase has the following limitations:

    • Le dimensioni massime consentite per la riga, inclusa la lunghezza totale delle colonne a lunghezza variabile, non possono superare 32 KB in SQL Server o 1 MB in Azure SQL Data Warehouse.The maximum possible row size, including the full length of variable length columns, can not exceed 32 KB in SQL Server or 1 MB in Azure SQL Data Warehouse.
    • PolyBase non supporta il tipo di dati Hive 0.12+ (ovvero Char(), VarChar())PolyBase doesn’t support the Hive 0.12+ data types (i.e. Char(), VarChar())
    • In caso di esportazione di dati in un file in formato ORC da SQL Server o Azure SQL Data Warehouse le colonne contenenti molto testo possono essere limitate a un massimo di 50 colonne a causa degli errori Java di memoria insufficiente.When exporting data into an ORC File Format from SQL Server or Azure SQL Data Warehouse text heavy columns can be limited to as few as 50 columns due to java out of memory errors. Per risolvere questo problema, esportare solo un subset delle colonne.To work around this, export only a subset of the columns.
    • Impossibile leggere o scrivere i dati crittografati inattivi in Hadoop.Cannot Read or Write data encrypted at rest in Hadoop. Sono incluse le aree crittografate HDFS o la crittografia trasparente.This includes HDFS Encrypted Zones or Transparent Encryption.
    • PolyBase non può connettersi a un'istanza di Hortonworks se KNOX è abilitata.PolyBase cannot connect to a Hortonworks instance if KNOX is enabled.
    • Se si usano tabelle Hive con transactional=true, PolyBase non può accedere ai dati nella directory della tabella Hive.If you are using Hive tables with transactional = true, PolyBase cannot access the data in the Hive table's directory.

PolyBase non viene installato quando si aggiunge un nodo a un cluster di failover di SQL Server 2016PolyBase doesn't install when you add a node to a SQL Server 2016 Failover Cluster

Disponibilità elevata di Hadoop Name NodeHadoop Name Node High Availability

PolyBase non interagisce con i servizi Name Node HA come Zookeeper o Knox.PolyBase does not interface with Name Node HA services like Zookeeper or Knox today. Tuttavia, esiste una soluzione alternativa comprovata che può essere usata per realizzare la funzionalità.However, there is a proven workaround that can be used to provide the functionality.

Soluzione alternativa: utilizzare il nome DNS per reindirizzare le connessioni al Name Node attivo.Work Around: Use DNS name to reroute connections to the active Name Node. A questo scopo, è necessario assicurarsi che l'origine dati esterna utilizzi un nome DNS per comunicare con il Name Node.In order to do this, you will need to ensure that the External Data Source is using a DNS name to communicate with the 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.When Name Node Failover occurs, you will need to change the IP address associated with the DNS name used in the External Data Source definition. Ciò reindirizza tutte le nuove connessioni al Name Node corretto.This will reroute all new connections to the correct Name Node. Le connessioni esistenti avranno esito negativo quando si verifica il failover.Existing connections will fail when failover occurs. Per automatizzare questo processo, un "heartbeat" può eseguire il ping del Name Node attivo.To automate this process, a "heartbeat" can ping the active Name Node. 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.If the heart beat fails, one can assume a failover has occured and automatically switch to the secondaries IP address.

Messaggi di errore e possibili soluzioniError messages and possible solutions

Per risolvere gli errori delle tabelle esterne, vedere il post https://blogs.msdn.microsoft.com/sqlcat/2016/06/21/polybase-setup-errors-and-possible-solutions/nel blog di Zaman Murshed.To troubleshoot external table errors, see Murshed Zaman's blog https://blogs.msdn.microsoft.com/sqlcat/2016/06/21/polybase-setup-errors-and-possible-solutions/.

Vedere ancheSee also

Risolvere i problemi di connettività di PolyBase KerberosTroubleshoot PolyBase Kerberos connectivity