Supervisión y solución de problemas de PolyBase
Se aplica a: SQL Server
Para solucionar problemas de PolyBase, use las técnicas que aparecen en este tema.
Vistas de catálogo
Use las vistas de catálogo que aparecen aquí para administrar las operaciones de PolyBase.
Ver | Descripción |
---|---|
sys.external_tables (Transact-SQL) | Identifica tablas externas. |
sys.external_data_sources (Transact-SQL) | Identifica orígenes de datos externos. |
sys.external_file_formats (Transact-SQL) | Identifica formatos de archivo externos. |
Vistas de administración dinámica
Las consultas de PolyBase se dividen en una serie de pasos dentro de sys.dm_exec_distributed_request_steps
. En la tabla siguiente, se proporciona una asignación desde el nombre del paso a la DMV asociada.
Paso de PolyBase | DMV asociada |
---|---|
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 |
Supervisar consultas de PolyBase con DMV
Supervise y solucione problemas de las consultas de PolyBase con los siguientes DMV. Tenga en cuenta también las siguientes consideraciones de rendimiento en PolyBase para SQL Server.
Encuentre las consultas que más tardan en ejecutarse
Anote el id. de ejecución de la consulta que más tarda en ejecutarse.
-- 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;
Encuentre el paso de la consulta distribuida que más tarda en ejecutarse
Use el id. de ejecución que anotó en el paso anterior. Anote el índice de paso del paso que más tarda en ejecutarse.
Compruebe el valor
location_type
del paso que más tarda en ejecutarse:HEAD o proceso: implica una operación SQL. Vaya al Paso 3a.
- DMS: implica una operación del servicio de movimiento de datos de PolyBase. Vaya al Paso 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;
Encuentre el progreso de la ejecución del paso que más tarda en ejecutarse
Encuentre el progreso de la ejecución de un paso de SQL
Use el id. de ejecución y el índice de paso que anotó en los pasos 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;
Encuentre el progreso de la ejecución de un paso de DMS
Use el id. de ejecución y el índice de paso que anotó en los pasos 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;
Encuentre la información sobre las operaciones DMS externas
Use el id. de ejecución y el índice de paso que anotó en los pasos 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;
Ver el plan de consulta de PolyBase
En SQL Server 2019 (15.x), puede ver el plan de ejecución que se ha pasado al origen de datos externo mediante la marca de seguimiento 6408. Para obtener más información, vea Cómo saber si se ha producido una delegación externa.
En SQL Server 2016 (13.x) o SQL Server 2017 (14.x), esta estrategia alternativa funciona:
En SQL Server Management Studio, habilite Incluir plan de ejecución real (Ctrl+M) y ejecute la consulta.
Seleccione la pestaña Plan de ejecución.
Haga clic con el botón derecho en el operador de consulta remota y seleccione Propiedades.
Copie y pegue el valor de consulta remota en un editor de texto para ver el plan de consulta remota en formato XML. A continuación, se muestra un ejemplo de .
Las etiquetas sql_operation
indican operaciones dentro de SQL Server. Las etiquetas dsql_operations
con operation_types
que no están en "ON" indican los operadores externos que emplea el servicio de Movimiento de datos de 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>
Supervisar nodos de un grupo de PolyBase
Después de configurar un conjunto de máquinas como parte de un grupo de escalado horizontal de PolyBase, puede supervisar el estado de las máquinas. Para obtener detalles sobre cómo crear un grupo de escalado horizontal, vea Grupos de escalado horizontal de PolyBase.
Conéctese a SQL Server en el nodo principal de un grupo.
Ejecute la DMV sys.dm_exec_compute_nodes (Transact-SQL) para ver todos los nodos del grupo de PolyBase.
Ejecute la DMV sys.dm_exec_compute_node_status (Transact-SQL) para ver el estado de todos los nodos del grupo de PolyBase.
Alta disponibilidad de NameNode de Hadoop
Actualmente, PolyBase no se comunica con servicios de alta disponibilidad de NameNode como Zookeeper o Knox, pero existe una solución alternativa probada que se puede usar para ofrecer la funcionalidad.
Solución alternativa: Usar un nombre DNS para volver a enrutar las conexiones al NameNode activo. Para ello, debe asegurarse de que el origen de datos externo usa un nombre DNS para comunicarse con el NameNode. Si se produce una conmutación por error de NameNode, deberá cambiar la dirección IP asociada al nombre DNS usado en la definición del origen de datos externo. Se volverán a enrutar todas las conexiones nuevas al NameNode correcto. Las conexiones existentes generarán un error si se produce una conmutación por error. Para automatizar este proceso, un "latido" puede hacer ping en el NameNode activo. Si se produce un error en el latido, se puede dar por hecho que se ha producido una conmutación por error y pasar automáticamente a las direcciones IP secundarias.
Ubicación de los archivos de registro
En los servidores de Windows, los registros se encuentran en la ruta de acceso del directorio de instalación, de forma predeterminada: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
En los servidores de Linux, los registros se encuentran de forma predeterminada en /var/opt/mssql/log/polybase
.
Archivos de registro de movimiento de datos de PolyBase:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
Archivos de registro del servicio de motor de PolyBase:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
En Windows, los archivos de registro de Java de PolyBase:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
En Linux, los archivos de registro de Java de PolyBase:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Mensajes de error y posibles soluciones
Para ver escenarios de solución de problemas comunes, consulte Errores de PolyBase y posibles soluciones.