sys.dm_os_workers (T-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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 set hasilnya.
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