Monitorar e solucionar problemas do PolyBase
Aplica-se a:SQL Server
Para solucionar problemas do PolyBase, use as técnicas encontradas neste tópico.
Visualizações do catálogo
Use as exibições de catálogo listadas aqui para gerenciar operações do PolyBase.
Visão | Descrição |
---|---|
sys.external_tables (Transact-SQL) | Identifica tabelas externas. |
sys.external_data_sources (Transact-SQL) | Identifica fontes de dados externas. |
sys.external_file_formats (Transact-SQL) | Identifica formatos de arquivo externos. |
Visualizações de gerenciamento dinâmico
As consultas PolyBase são divididas em uma série de etapas dentro sys.dm_exec_distributed_request_steps
. A tabela a seguir fornece um mapeamento do nome da etapa para o Detran associado.
Etapa PolyBase | Detran Associado |
---|---|
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 |
Monitorizar consultas PolyBase usando DMVs
Monitore e solucione problemas de consultas PolyBase usando os seguintes DMVs. Considere também as seguintes considerações de desempenho no PolyBase para SQL Server.
Encontre as consultas mais antigas
Registre a ID de execução da consulta de execução mais longa.
-- 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;
Encontre o passo mais longo da execução da consulta distribuída
Use o ID de execução registrado na etapa anterior. Registre o índice de etapas da etapa de execução mais longa.
Confira a
location_type
da etapa mais longa:Head ou Compute: implica uma operação SQL. Prossiga com o Passo 3a.
- DMS: implica uma operação do PolyBase Data Movement Service. Prossiga com o Passo 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;
Encontre o progresso da execução da etapa mais longa
Localizar o progresso da execução de uma etapa SQL
Use o ID de execução e o índice de etapas registrados nas etapas anteriores.
-- 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;
Encontre o progresso da execução de uma etapa do DMS
Use o ID de execução e o índice de etapas registrados nas etapas anteriores.
-- 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;
Encontre as informações sobre operações DMS externas
Use o ID de execução e o índice de etapas registrados nas etapas anteriores.
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;
Exibir o plano de consulta do PolyBase
No SQL Server 2019 (15.x), você pode exibir o plano de execução passado para a fonte de dados externa usando o Sinalizador de Rastreamento 6408. Para obter mais informações, consulte Como saber se ocorreu um empurrão para baixo externo.
No SQL Server 2016 (13.x) ou no SQL Server 2017 (14.x), essa estratégia alternativa funciona:
No SQL Server Management Studio, selecione Incluir Plano de Execução Real (Ctrl + M) e execute a consulta.
Selecione a guia Plano de execução.
Clique com o botão direito do rato no operador Remote Query e selecione Propriedades.
Copie e cole o valor de Consulta Remota num editor de texto para visualizar o plano de consulta remota XML. Um exemplo é mostrado abaixo.
As marcas sql_operation
indicam operações no SQL Server. Os dsql_operations
com operation_types
que não estão "ON" indicam os operadores externos usados pelo serviço 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>
Monitorizar nós num grupo PolyBase
Depois de configurar um conjunto de máquinas como parte de um grupo de expansão do PolyBase, você pode monitorar o status das máquinas. Para obter detalhes sobre como criar um grupo de expansão, consulte grupos de expansão do PolyBase.
Conecte-se ao SQL Server no nó principal de um grupo.
Execute a DMV sys.dm_exec_compute_nodes (Transact-SQL) para visualizar todos os nós no Grupo PolyBase.
Execute o sys.dm_exec_compute_node_status DMV (Transact-SQL) para exibir o status de todos os nós no Grupo PolyBase.
Alta disponibilidade do NameNode do Hadoop
No momento, o PolyBase não faz interface com serviços de alta disponibilidade do Name Node, como o Zookeeper ou o Knox. No entanto, há uma solução alternativa comprovada que pode ser usada para fornecer a funcionalidade.
Solução alternativa: use o nome DNS para redirecionar conexões para NomeNode ativo. Para fazer isso, você precisará garantir que a Fonte de Dados Externa esteja usando um nome DNS para se comunicar com o Nó de Nome. Quando ocorrer o failover do Name Node, será necessário alterar o endereço IP associado ao nome DNS usado na definição da fonte externa de dados. Isso redirecionará todas as novas conexões para o Nó de Nome correto. As ligações existentes falharão quando ocorrer uma falha de transferência. Para automatizar esse processo, uma "pulsação" pode executar ping no nó de nome ativo. Se o batimento cardíaco falhar, pode-se assumir que ocorreu um failover e mudar automaticamente para o endereço IP secundário.
Locais dos arquivos de log
Nos servidores Windows, os logs estão localizados no caminho do diretório de instalação, por padrão: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
Em servidores Linux, os logs estão localizados por padrão em /var/opt/mssql/log/polybase
.
Arquivos de log de movimentação de dados do PolyBase:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
Arquivos de log de serviço do mecanismo PolyBase:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
No Windows, os arquivos de log Java do PolyBase:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
No Linux, os arquivos de log Java do PolyBase:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Mensagens de erro e possíveis soluções
Para cenários comuns de solução de problemas, consulte PolyBase Errors and Possible Solutions.