Memantau dan memecahkan masalah PolyBase
Berlaku untuk: SQL Server
Untuk memecahkan masalah PolyBase, gunakan teknik yang ditemukan dalam topik ini.
Tampilan katalog
Gunakan tampilan katalog yang tercantum di sini untuk mengelola operasi PolyBase.
Tampilan | Deskripsi |
---|---|
sys.external_tables (T-SQL) | Mengidentifikasi tabel eksternal. |
sys.external_data_sources (T-SQL) | Mengidentifikasi sumber data eksternal. |
sys.external_file_formats (T-SQL) | Mengidentifikasi format file eksternal. |
Tampilan manajemen dinamis
Kueri PolyBase dipecah menjadi serangkaian langkah dalam sys.dm_exec_distributed_request_steps
. Tabel berikut ini menyediakan pemetaan dari nama langkah ke DMV terkait.
Langkah PolyBase | DMV terkait |
---|---|
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 |
Memantau kueri PolyBase menggunakan DMV
Pantau dan pecahkan masalah kueri PolyBase menggunakan DMV berikut. Pertimbangkan juga pertimbangan performa berikut di PolyBase untuk SQL Server.
Menemukan kueri terlama yang berjalan
Rekam ID eksekusi kueri terlama yang berjalan.
-- 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;
Menemukan langkah terlama kueri terdistribusi
Gunakan ID eksekusi yang direkam di langkah sebelumnya. Rekam indeks langkah dari langkah terlama.
location_type
Periksa langkah terlama:Head atau Compute: menyiratkan operasi SQL. Lanjutkan dengan Langkah 3a.
- DMS: menyiratkan operasi PolyBase Data Movement Service. Lanjutkan dengan Langkah 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;
Temukan kemajuan eksekusi langkah terlama
Menemukan kemajuan eksekusi langkah SQL
Gunakan ID eksekusi dan indeks langkah yang direkam di langkah-langkah sebelumnya.
-- 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;
Menemukan kemajuan eksekusi langkah DMS
Gunakan ID eksekusi dan indeks langkah yang direkam di langkah-langkah sebelumnya.
-- 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;
Temukan informasi tentang operasi DMS eksternal
Gunakan ID eksekusi dan indeks langkah yang direkam di langkah-langkah sebelumnya.
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;
Menampilkan rencana kueri PolyBase
Di SQL Server 2019 (15.x), Anda dapat melihat rencana eksekusi yang diteruskan ke sumber data eksternal menggunakan Bendera Pelacakan 6408. Untuk informasi selengkapnya, lihat Cara mengetahui apakah pushdown eksternal terjadi.
Di SQL Server 2016 (13.x) atau SQL Server 2017 (14.x), strategi alternatif ini berfungsi:
Di SQL Server Management Studio, aktifkan Sertakan Rencana Eksekusi Aktual (Ctrl + M) dan jalankan kueri.
Pilih tab Rencana eksekusi.
Klik kanan pada operator Kueri Jarak Jauh dan pilih Properti.
Salin dan tempel nilai Kueri Jarak Jauh ke editor teks untuk menampilkan rencana kueri jarak jauh XML. Contoh ditunjukkan di bawah ini.
Tag sql_operation
menunjukkan operasi dalam SQL Server. dsql_operations
dengan operation_types
yang bukan "AKTIF" menunjukkan operator eksternal yang digunakan oleh layanan Pergerakan Data 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>
Memantau simpul dalam grup PolyBase
Setelah mengonfigurasi sekumpulan komputer sebagai bagian dari grup peluasan skala PolyBase, Anda dapat memantau status komputer. Untuk detail tentang membuat grup peluasan skala, lihat Grup peluasan skala PolyBase.
Sambungkan ke SQL Server pada simpul kepala grup.
Jalankan sys.dm_exec_compute_nodes DMV (Transact-SQL) untuk melihat semua simpul di Grup PolyBase.
Jalankan sys.dm_exec_compute_node_status DMV (Transact-SQL) untuk melihat status semua simpul di Grup PolyBase.
Ketersediaan tinggi node nama Hadoop
PolyBase tidak berinteraksi dengan layanan Name Node HA seperti Zookeeper atau Knox saat ini. Namun, ada solusi yang terbukti yang dapat digunakan untuk menyediakan fungsionalitas.
Solusi sementara: Gunakan nama DNS untuk mengalihkan koneksi ke Simpul Nama aktif. Untuk melakukan ini, Anda harus memastikan bahwa Sumber Data Eksternal menggunakan nama DNS untuk berkomunikasi dengan Simpul Nama. Ketika Failover Node Nama terjadi, Anda harus mengubah alamat IP yang terkait dengan nama DNS yang digunakan dalam definisi Sumber Data Eksternal. Ini akan mengalihkan semua koneksi baru ke Simpul Nama yang benar. Koneksi yang ada akan gagal ketika failover terjadi. Untuk mengotomatiskan proses ini, "heartbeat" dapat melakukan ping pada Node Nama aktif. Jika heart beat gagal, seseorang dapat mengasumsikan failover telah terjadi dan secara otomatis beralih ke alamat IP sekunder.
Lokasi file log
Di server Windows, log terletak di jalur direktori penginstalan, secara default: c:\Program Files\Microsoft SQL Server\MSSQLnn.InstanceName\MSSQL\Log\PolyBase\
.
Di server Linux, log terletak secara default di /var/opt/mssql/log/polybase
.
File log pergerakan data PolyBase:
<INSTANCENAME>_<SERVERNAME>_Dms_errors.log
<INSTANCENAME>_<SERVERNAME>_Dms_movement.log
File log layanan mesin PolyBase:
<INSTANCENAME>_<SERVERNAME>_DWEngine_errors.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_movement.log
<INSTANCENAME>_<SERVERNAME>_DWEngine_server.log
Di Windows, file log PolyBase Java:
<SERVERNAME> Dms polybase.log
<SERVERNAME>_DWEngine_polybase.log
Di Linux, file log PolyBase Java:
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_pdw.log
/var/opt/mssql-extensibility/hdfs_bridge/log/hdfs_bridge_dms.log
Pesan kesalahan dan kemungkinan solusi
Untuk skenario pemecahan masalah umum, lihat Kesalahan PolyBase dan Kemungkinan Solusi.