sys.dm_os_workers (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Mengembalikan baris untuk setiap pekerja dalam sistem. Untuk informasi selengkapnya tentang pekerja, lihat Panduan Arsitektur Utas dan Tugas.

Catatan

Untuk memanggil ini dari Azure Synapse Analytics atau Analytics Platform System (PDW), gunakan nama sys.dm_pdw_nodes_os_workers. Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Nama kolom Jenis data Deskripsi
worker_address varbinary(8) Alamat memori pekerja.
status int Penggunaan internal saja.
is_preemptive bit 1 = Pekerja berjalan dengan penjadwalan preemptive. Setiap pekerja yang menjalankan kode eksternal dijalankan di bawah penjadwalan preemptive.
is_fiber bit 1 = Pekerja berjalan dengan pengumpulan ringan. Untuk informasi selengkapnya, lihat sp_configure (Transact-SQL).
is_sick bit 1 = Pekerja terjebak saat mencoba mendapatkan kunci putaran. Jika bit ini diatur, ini mungkin menunjukkan masalah dengan ketidakcocokan pada objek yang sering diakses.
is_in_cc_exception bit 1 = Pekerja saat ini menangani pengecualian non-SQL Server.
is_fatal_exception bit Menentukan apakah pekerja ini menerima pengecualian fatal.
is_inside_catch bit 1 = Pekerja saat ini menangani pengecualian.
is_in_polling_io_completion_routine bit 1 = Pekerja saat ini menjalankan rutinitas penyelesaian I/O untuk I/O yang tertunda. Untuk informasi selengkapnya, lihat sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Jumlah pengalihan konteks penjadwal yang dilakukan oleh pekerja ini.
pending_io_count int Jumlah I/Os fisik yang dilakukan oleh pekerja ini.
pending_io_byte_count bigint Jumlah total byte untuk semua I/Os fisik yang tertunda untuk pekerja ini.
pending_io_byte_average int Jumlah rata-rata byte untuk I/Os fisik untuk pekerja ini.
wait_started_ms_ticks bigint Titik waktu, dalam ms_ticks, ketika pekerja ini memasuki status SUSPENDED. Mengurangi nilai ini dari ms_ticks dalam sys.dm_os_sys_info mengembalikan jumlah milidetik yang telah dinantikan pekerja.
wait_resumed_ms_ticks bigint Titik waktu, dalam ms_ticks, ketika pekerja ini memasuki status RUNNABLE. Mengurangi nilai ini dari ms_ticks dalam sys.dm_os_sys_info mengembalikan jumlah milidetik bahwa pekerja telah berada dalam antrean yang dapat dijalankan.
task_bound_ms_ticks bigint Titik waktu, dalam ms_ticks, ketika tugas terikat dengan pekerja ini.
worker_created_ms_ticks bigint Titik waktu, dalam ms_ticks, saat pekerja dibuat.
exception_num int Nomor kesalahan pengecualian terakhir yang ditemui pekerja ini.
exception_severity int Tingkat keparahan pengecualian terakhir yang ditemui pekerja ini.
exception_address varbinary(8) Alamat kode yang melemparkan pengecualian
Afinitas bigint Afinitas utas pekerja. Cocok dengan afinitas utas di sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Status pekerja. Dapat berupa salah satu dari nilai berikut:

INIT = Pekerja saat ini sedang diinisialisasi.

RUNNING = Pekerja saat ini berjalan baik secara nonpreemptive maupun preemptively.

RUNNABLE = Pekerja siap untuk berjalan pada penjadwal.

SUSPENDED = Pekerja saat ini ditangguhkan, menunggu peristiwa mengirimkan sinyal.
start_quantum bigint Waktu, dalam milidetik, pada awal eksekusi pekerja ini saat ini.
end_quantum bigint Waktu, dalam milidetik, di akhir eksekusi pekerja ini saat ini.
last_wait_type nvarchar(60) Jenis penantian terakhir. Untuk daftar jenis tunggu, lihat sys.dm_os_wait_stats (Transact-SQL).
return_code int Mengembalikan nilai dari penantian terakhir. Dapat berupa salah satu dari nilai berikut:

0 =SUCCESS

3 = KEBUNTUAN

4 = PREMATURE_WAKEUP

258 = BATAS WAKTU
quantum_used bigint Penggunaan internal saja.
max_quantum bigint Penggunaan internal saja.
boost_count int Penggunaan internal saja.
tasks_processed_count int Jumlah tugas yang diproses pekerja ini.
fiber_address varbinary(8) Alamat memori serat tempat pekerja ini dikaitkan.

NULL = SQL Server tidak dikonfigurasi untuk pengumpulan ringan.
task_address varbinary(8) Alamat memori tugas saat ini. Untuk informasi selengkapnya, lihat sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Alamat memori objek memori pekerja. Untuk informasi selengkapnya, lihat sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Alamat memori utas yang terkait dengan pekerja ini. Untuk informasi selengkapnya, lihat sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Alamat memori pekerja yang terakhir memberi sinyal objek ini. Untuk informasi selengkapnya, lihat sys.dm_os_workers.
penjadwal_alamat varbinary(8) Alamat memori penjadwal. Untuk informasi selengkapnya, lihat sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Menyimpan ID grup prosesor yang ditetapkan ke utas ini.
pdw_node_id int Berlaku untuk: Azure Synapse Analytics, Analytics Platform System (PDW)

Pengidentifikasi untuk simpul tempat distribusi ini aktif.

Keterangan

Jika status pekerja BERJALAN dan pekerja berjalan secara tidak mendahului, alamat pekerja cocok dengan active_worker_address di sys.dm_os_schedulers.

Ketika pekerja yang menunggu acara diberi sinyal, pekerja ditempatkan di kepala antrean yang dapat dijalankan. SQL Server memungkinkan hal ini terjadi seribu kali berturut-turut, setelah itu pekerja ditempatkan di akhir antrean. Memindahkan pekerja ke akhir antrean memiliki beberapa implikasi performa.

Izin

Di SQL Server, memerlukan VIEW SERVER STATE izin.
Pada Tingkat Premium SQL Database, memerlukan VIEW DATABASE STATE izin dalam database. Pada Tingkat Standar dan Dasar SQL Database, memerlukan Server Admin keanggotaan peran, atau Azure Active Directory admin akun.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Contoh

Anda dapat menggunakan kueri berikut untuk mengetahui berapa lama pekerja telah berjalan dalam status SUSPENDED atau RUNNABLE.

SELECT   
    t1.session_id,  
    CONVERT(varchar(10), t1.status) AS status,  
    CONVERT(varchar(15), t1.command) AS command,  
    CONVERT(varchar(10), t2.state) AS worker_state,  
    w_suspended =   
      CASE t2.wait_started_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_started_ms_ticks  
      END,  
    w_runnable =   
      CASE t2.wait_resumed_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_resumed_ms_ticks  
      END  
  FROM sys.dm_exec_requests AS t1  
  INNER JOIN sys.dm_os_workers AS t2  
    ON t2.task_address = t1.task_address  
  CROSS JOIN sys.dm_os_sys_info AS t3  
  WHERE t1.scheduler_id IS NOT NULL;  

Berikut adalah hasil yang ditetapkan.

 session_id status     command         worker_state w_suspended w_runnable  
 ---------- ---------- --------------- ------------ ----------- --------------------  
 4          background LAZY WRITER     SUSPENDED    688         688  
 6          background LOCK MONITOR    SUSPENDED    4657        4657
 19         background BRKR TASK       SUSPENDED    603820344   603820344  
 14         background BRKR EVENT HNDL SUSPENDED    63583641    63583641  
 51         running    SELECT          RUNNING      0           0  
 2          background RESOURCE MONITO RUNNING      0           603825954  
 3          background LAZY WRITER     SUSPENDED    422         422  
 7          background SIGNAL HANDLER  SUSPENDED    603820485   603820485  
 13         background TASK MANAGER    SUSPENDED    603824704   603824704  
 18         background BRKR TASK       SUSPENDED    603820407   603820407  
 9          background TRACE QUEUE TAS SUSPENDED    454         454  
 52         suspended  SELECT          SUSPENDED    35094       35094  
 1          background RESOURCE MONITO RUNNING      0           603825954  

Dalam output, ketika w_runnable dan w_suspended sama, ini mewakili waktu pekerja berada dalam status SUSPENDED. Jika tidak, w_runnable mewakili waktu yang dihabiskan oleh pekerja dalam status RUNNABLE. Dalam output, sesi 52 adalah SUSPENDED untuk 35,094 milidetik.

Lihat Juga

Tampilan Manajemen Dinamis Terkait Sistem Operasi SQL Server (Transact-SQL)
Panduan Arsitektur Pemrosesan Kueri
Panduan Arsitektur Utas dan Tugas