Monitorar e solucionar problemas do PolyBase
Aplica-se: SQL Server
Para solucionar problemas do PolyBase, use as técnicas encontradas neste tópico.
Exibições do catálogo
Use as exibições do catálogo listadas aqui para gerenciar as operações de PolyBase.
Visualizar | 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. |
Exibições de gerenciamento dinâmico
As consultas do PolyBase são divididas em uma série de etapas dentro do sys.dm_exec_distributed_request_steps
. A tabela a seguir fornece um mapeamento do nome da etapa ao DMV associado.
Etapa do PolyBase | DMV 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 |
Monitorar consultas do PolyBase usando DMVs
Monitorar e solucionar problemas de consultas do PolyBase usando as DMVs a seguir. Inclua também as seguintes considerações de desempenho no PolyBase para SQL Server.
Localizar as consultas mais longas em execução
Registre a ID de execução da consulta mais longa em execução.
-- 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;
Localize a etapa de execução mais longa da consulta distribuída
Use a ID de execução registrada na etapa anterior. Registre o índice da etapa a etapa mais longa em execução.
Verifique
location_type
da etapa mais longa em execução:Cabeçalho ou cálculo: implica uma operação de SQL. Vá para a etapa 3a.
- DMS: implica uma operação de serviço de movimentação de dados do PolyBase. Vá para a etapa 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;
Registre o andamento da execução da etapa de execução mais longa
Localizar o andamento da execução de uma etapa SQL
Use a ID de execução e o índice de etapa 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;
Localizar o andamento da execução de uma etapa DMS
Use a ID de execução e o índice de etapa 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;
Localizar as informações sobre operações de DMS externas
Use a ID de execução e o índice de etapa 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 visualizar o plano de execução passado para a fonte de dados externa com o sinalizador de rastreamento 6408. Para obter mais informações, confira Como saber se ocorreu um pushdown externo.
No SQL Server 2016 (13.x) ou SQL Server 2017 (14.x), a seguinte estratégia alternativa funciona:
No SQL Server Management Studio, habilite 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 mouse no Operador de Consulta Remota e selecione Propriedades.
Copie e cole o valor da consulta remota em um editor de texto para exibir o plano de consulta remota de XML. Um exemplo é mostrado abaixo.
As marcas sql_operation
indicam operações no SQL Server. As dsql_operations
com operation_types
que não estão "ATIVADOS" indicam os operadores externos usados pelo serviço de Movimentação de Dados PolyBase.
<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>
Monitorar nós em um grupo de PolyBase
Depois de configurar um conjunto de computadores como parte de um grupo de escala horizontal do PolyBase, você pode monitorar o status dos computadores. Para obter detalhes sobre como criar um grupo de escala horizontal, veja Grupos de escala horizontal do PolyBase.
Conecte-se ao SQL Server no nó principal de um grupo.
Execute a DMV sys.dm_exec_compute_nodes (Transact-SQL) para exibir todos os nós do Grupo do PolyBase.
Execute a DMV sys.dm_exec_compute_node_status (Transact-SQL) para exibir o status de todos os nós do Grupo do PolyBase.
Alta disponibilidade do nó de nome do Hadoop
O PolyBase não estabelece uma interface com os serviços de HA do nó de nome como o Zookeeper ou o Knox atualmente. No entanto, há uma solução comprovada que pode ser usada para fornecer a funcionalidade.
Solução alternativa: use o nome DNS para redirecionar conexões para o nó de nome 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 nó de nome, você precisará alterar o endereço IP associado ao nome DNS usado na definição de fonte de dados externa. Isso redirecionará todas as novas conexões para o nó de nome correto. As conexões existentes falharão quando ocorrer failover. Para automatizar esse processo, uma "pulsação" pode executar o ping no nó de nome ativo. Se a pulsação falha, é possível assumir que um failover ocorreu e alternar automaticamente para o endereço IP secundário.
Localizações do arquivo de log
Em 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 PolyBase:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
Arquivos de log do serviço de mecanismo PolyBase:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
No Windows, os arquivos de log do PolyBase Java:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
No Linux, os arquivos de log do PolyBase Java:
/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 de solução de problemas comuns, confira Erros do PolyBase e possíveis soluções.