Lenguaje
Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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ámicas
Las consultas de PolyBase se dividen en una serie de pasos dentro de sys.dm_exec_distributed_request_steps. La siguiente tabla muestra una correspondencia entre el nombre del paso y 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 con las consultas de PolyBase mediante las 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 con el tiempo de ejecución más largo.
-- 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 registrado en el paso anterior. Registre el índice del paso que tarda más en ejecutarse.
Compruebe el valor
location_typedel paso que más tarda en ejecutarse:HEAD o cómputo: indica una operación SQL. Continúe con el 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
Utilice el ID de ejecución y el índice del paso registrados 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
Utilice el ID de ejecución y el índice del paso registrados 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
Utilice el ID de ejecución y el índice del paso registrados 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 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.
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 del 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. Cuando se produzca una conmutación por error de Name Node, deberá cambiar la dirección IP asociada al nombre DNS utilizado en la definición del origen de datos externo. Se volverán a enrutar todas las conexiones nuevas al NameNode correcto. Las conexiones existentes fallarán cuando se produzca 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.