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.

Tampilkan 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.

  1. 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;  
    
  2. 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;  
      
  3. Temukan kemajuan eksekusi langkah terlama

    1. 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;  
      
    2. 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;
      
  4. 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:

  1. Di SQL Server Management Studio, aktifkan Sertakan Rencana Eksekusi Aktual (Ctrl + M) dan jalankan kueri.

  2. Pilih tab Rencana eksekusi.

    Screenshot from SQL Server Management Studio of a PolyBase query execution plan.

  3. Klik kanan pada operator Kueri Jarak Jauh dan pilih Properti.

  4. 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.

  1. Koneksi ke SQL Server pada simpul kepala grup.

  2. Jalankan sys.dm_exec_compute_nodes DMV (Transact-SQL) untuk melihat semua simpul di Grup PolyBase.

  3. 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.