sys.dm_os_schedulers (T-SQL)

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

Mengembalikan satu baris per penjadwal di SQL Server tempat setiap penjadwal dipetakan ke prosesor individual. Gunakan tampilan ini untuk memantau kondisi penjadwal atau untuk mengidentifikasi tugas pelarian. Untuk informasi selengkapnya tentang penjadwal, 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_schedulers. Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Nama kolom Jenis data Deskripsi
penjadwal_alamat varbinary(8) Alamat memori penjadwal. Tidak dapat diubah ke null.
parent_node_id int ID simpul tempat penjadwal berada, juga dikenal sebagai simpul induk. Ini mewakili simpul akses memori nonuniform (NUMA). Tidak dapat diubah ke null.
scheduler_id int ID penjadwal. Semua penjadwal yang digunakan untuk menjalankan kueri reguler memiliki nomor ID kurang dari 1048576. Penjadwal yang memiliki ID lebih besar dari atau sama dengan 1048576 digunakan secara internal oleh SQL Server, seperti penjadwal koneksi administrator khusus. Tidak dapat diubah ke null.
cpu_id smallint ID CPU yang ditetapkan ke penjadwal.

Tidak dapat diubah ke null.

Catatan: 255 tidak menunjukkan tidak ada afinitas seperti yang terjadi di SQL Server 2005 (9.x). Lihat sys.dm_os_threads (Transact-SQL) untuk informasi afinitas tambahan.
status nvarchar(60) Menunjukkan status penjadwal. Dapat berupa salah satu dari nilai berikut:

- TERSEMBUNYI ONLINE
- TERSEMBUNYI OFFLINE
- TERLIHAT ONLINE
- TERLIHAT OFFLINE
- TERLIHAT ONLINE (DAC)
- HOT_ADDED

Tidak dapat diubah ke null.

Penjadwal TERSEMBUNYI digunakan untuk memproses permintaan yang bersifat internal untuk Mesin Database. Penjadwal VISIBLE digunakan untuk memproses permintaan pengguna.

Penjadwal OFFLINE memetakan ke prosesor yang offline dalam masker afinitas dan, oleh karena itu, tidak digunakan untuk memproses permintaan apa pun. Penjadwal ONLINE memetakan ke prosesor yang online dalam masker afinitas dan tersedia untuk memproses utas.

DAC menunjukkan penjadwal berjalan di bawah koneksi administrator khusus.

HOT ADDED menunjukkan penjadwal ditambahkan sebagai respons terhadap peristiwa CPU hot add.
sedang on line bit Jika SQL Server dikonfigurasi untuk hanya menggunakan beberapa prosesor yang tersedia di server, konfigurasi ini dapat berarti bahwa beberapa penjadwal dipetakan ke prosesor yang tidak berada dalam masker afinitas. Jika demikian, kolom ini mengembalikan 0. Nilai ini berarti bahwa penjadwal tidak digunakan untuk memproses kueri atau batch.

Tidak dapat diubah ke null.
is_idle bit 1 = Scheduler menganggur. Tidak ada pekerja yang sedang berjalan. Tidak dapat diubah ke null.
preemptive_switches_count int Berapa kali pekerja pada penjadwal ini beralih ke mode preemptive.

Untuk menjalankan kode yang berada di luar SQL Server (misalnya, prosedur tersimpan yang diperluas dan kueri terdistribusi), utas harus dijalankan di luar kontrol penjadwal non-preemptive. Untuk melakukan ini, pekerja beralih ke mode preemptive.
context_switches_count int Jumlah sakelar konteks yang telah terjadi pada penjadwal ini. Tidak dapat diubah ke null.

Untuk memungkinkan pekerja lain berjalan, pekerja yang sedang berjalan saat ini harus melepaskan kontrol penjadwal atau beralih konteks.

Catatan: Jika pekerja menghasilkan penjadwal dan memasukkan dirinya ke dalam antrean yang dapat dijalankan dan kemudian tidak menemukan pekerja lain, pekerja akan memilih dirinya sendiri. Dalam hal ini, context_switches_count tidak diperbarui, tetapi yield_count diperbarui.
idle_switches_count int Berapa kali penjadwal telah menunggu peristiwa saat diam. Kolom ini mirip dengan context_switches_count. Tidak dapat diubah ke null.
current_tasks_count int Jumlah tugas saat ini yang terkait dengan penjadwal ini. Jumlah ini mencakup hal-hal berikut:

- Tugas yang menunggu pekerja untuk mengeksekusinya.
- Tugas yang saat ini menunggu atau berjalan (dalam status SUSPENDED atau RUNNABLE).

Ketika tugas selesai, hitungan ini diderementasi. Tidak dapat diubah ke null.
runnable_tasks_count int Jumlah pekerja, dengan tugas yang ditetapkan kepada mereka, yang menunggu untuk dijadwalkan pada antrean yang dapat dijalankan. Tidak dapat diubah ke null.
current_workers_count int Jumlah pekerja yang terkait dengan penjadwal ini. Jumlah ini mencakup pekerja yang tidak diberi tugas apa pun. Tidak dapat diubah ke null.
active_workers_count int Jumlah pekerja yang aktif. Pekerja aktif tidak pernah mendahului, harus memiliki tugas terkait, dan berjalan, dapat dijalankan, atau ditangguhkan. Tidak dapat diubah ke null.
work_queue_count bigint Jumlah tugas dalam antrean yang tertunda. Tugas-tugas ini menunggu pekerja untuk mengambilnya. Tidak dapat diubah ke null.
pending_disk_io_count int Jumlah I/Os tertunda yang menunggu untuk diselesaikan. Setiap penjadwal memiliki daftar I/Os tertunda yang diperiksa untuk menentukan apakah mereka telah selesai setiap kali ada pengalihan konteks. Jumlah bertambah saat permintaan disisipkan. Jumlah ini direkrementasi ketika permintaan selesai. Angka ini tidak menunjukkan status I/Os. Tidak dapat diubah ke null.
load_factor int Nilai internal yang menunjukkan beban yang dirasakan pada penjadwal ini. Nilai ini digunakan untuk menentukan apakah tugas baru harus diletakkan pada penjadwal ini atau penjadwal lain. Nilai ini berguna untuk tujuan penelusuran kesalahan ketika muncul bahwa penjadwal tidak dimuat secara merata. Keputusan perutean dibuat berdasarkan beban pada penjadwal. SQL Server juga menggunakan faktor beban simpul dan penjadwal untuk membantu menentukan lokasi terbaik untuk memperoleh sumber daya. Ketika tugas diantrekan, faktor beban ditingkatkan. Ketika tugas selesai, faktor beban berkurang. Menggunakan faktor beban membantu OS SQL Server menyeimbangkan beban kerja dengan lebih baik. Tidak dapat diubah ke null.
yield_count int Nilai internal yang digunakan untuk menunjukkan kemajuan pada penjadwal ini. Nilai ini digunakan oleh Monitor Penjadwal untuk menentukan apakah pekerja pada penjadwal tidak menghasilkan pekerja lain tepat waktu. Nilai ini tidak menunjukkan bahwa pekerja atau tugas beralih ke pekerja baru. Tidak dapat diubah ke null.
last_timer_activity bigint Dalam centang CPU, terakhir kali antrean timer penjadwal diperiksa oleh penjadwal. Tidak dapat diubah ke null.
failed_to_create_worker bit Atur ke 1 jika pekerja baru tidak dapat dibuat pada penjadwal ini. Ini umumnya terjadi karena kendala memori. Dapat diubah ke null.
active_worker_address varbinary(8) Alamat memori pekerja yang saat ini aktif. Dapat diubah ke null. Untuk informasi selengkapnya, lihat sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Alamat memori objek memori penjadwal. Tidak DAPAT DIUBAH KE NULL.
task_memory_object_address varbinary(8) Alamat memori objek memori tugas. Tidak dapat diubah ke null. Untuk informasi selengkapnya, lihat sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin. Mengekspos kuantum penjadwal yang digunakan oleh SQLOS.
total_cpu_usage_ms bigint Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru

Total CPU yang digunakan oleh penjadwal ini seperti yang dilaporkan oleh pekerja non-preemptive. Tidak dapat diubah ke null.
total_cpu_idle_capped_ms bigint Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin. Menunjukkan pembatasan berdasarkan Tujuan Tingkat Layanan, akan selalu 0 untuk versi SQL Server non-Azure. Dapat diubah ke null.
total_scheduler_delay_ms bigint Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru

Waktu antara satu pekerja beralih dan satu lagi beralih masuk. Dapat disebabkan oleh pekerja preemptive yang menunda penjadwalan pekerja non-preemptive berikutnya, atau karena utas penjadwalan OS dari proses lain. Tidak dapat diubah ke null.
ideal_workers_limit int Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Berapa banyak pekerja yang idealnya harus berada di penjadwal. Jika pekerja saat ini melebihi batas karena beban tugas yang tidak seimbang, setelah diam, mereka akan dipangkas. Tidak dapat diubah ke null.
pdw_node_id int Berlaku untuk: Azure Synapse Analytics, Analytics Platform System (PDW)

Pengidentifikasi untuk simpul tempat distribusi ini aktif.

Izin

Pada SQL Server dan SQL Managed Instance, memerlukan VIEW SERVER STATE izin.

Pada tujuan layanan SQL Database Basic, S0, dan S1, dan untuk database di kumpulan elastis, akun admin server, akun admin Microsoft Entra, atau keanggotaan dalam##MS_ServerStateReader## peran server diperlukan. Pada semua tujuan layanan SQL Database lainnya, izin VIEW DATABASE STATE pada database, atau keanggotaan dalam ##MS_ServerStateReader## peran server diperlukan.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Contoh

J. Memantau penjadwal tersembunyi dan nonhidden

Kueri berikut menghasilkan status pekerja dan tugas di SQL Server di semua penjadwal. Kueri ini dijalankan pada sistem komputer yang memiliki hal berikut:

  • Dua prosesor (CPU)

  • Dua node (NUMA)

  • Satu CPU per simpul NUMA

  • Masker afinitas diatur ke 0x03.

SELECT  
    scheduler_id,  
    cpu_id,  
    parent_node_id,  
    current_tasks_count,  
    runnable_tasks_count,  
    current_workers_count,  
    active_workers_count,  
    work_queue_count  
  FROM sys.dm_os_schedulers;  

Berikut adalah hasil yang ditetapkan.

scheduler_id cpu_id parent_node_id current_tasks_count  
------------ ------ -------------- -------------------  
0            1      0              9                    
257          255    0              1                    
1            0      1              10                   
258          255    1              1                    
255          255    32             2                    
  
runnable_tasks_count current_workers_count  
-------------------- ---------------------  
0                    11                     
0                    1                      
0                    18                     
0                    1                      
0                    3                      
  
active_workers_count work_queue_count  
-------------------- --------------------  
6                    0  
1                    0  
8                    0  
1                    0  
1                    0  

Output menyediakan informasi berikut:

  • Ada lima penjadwal. Dua penjadwal memiliki nilai < ID 1048576. Penjadwal dengan ID >= 1048576 dikenal sebagai penjadwal tersembunyi. Scheduler 255 mewakili koneksi administrator khusus (DAC). Ada satu penjadwal DAC per instans. Monitor sumber daya yang mengoordinasikan tekanan memori menggunakan penjadwal 257 dan penjadwal 258, satu per simpul NUMA

  • Ada 23 tugas aktif dalam output. Tugas-tugas ini mencakup permintaan pengguna selain tugas manajemen sumber daya yang telah dimulai oleh SQL Server. Contoh tugas SQL Server adalah RESOURCE MONITOR (satu per simpul NUMA), LAZY WRITER (satu per node NUMA), LOCK MONITOR, CHECKPOINT, dan LOG WRITER.

  • Simpul 0 NUMA dipetakan ke simpul 1 CPU 1 dan NUMA dipetakan ke CPU 0. SQL Server biasanya dimulai pada simpul NUMA selain simpul 0.

  • Dengan runnable_tasks_count mengembalikan 0, tidak ada tugas yang berjalan secara aktif. Namun, sesi aktif mungkin ada.

  • Penjadwal 255 yang mewakili DAC memiliki 3 pekerja yang terkait dengannya. Pekerja ini dialokasikan di startup SQL Server dan tidak berubah. Pekerja ini hanya digunakan untuk memproses kueri DAC. Dua tugas pada penjadwal ini mewakili manajer koneksi dan pekerja menganggur.

  • active_workers_count mewakili semua pekerja yang memiliki tugas terkait dan berjalan dalam mode non-preemptive. Beberapa tugas, seperti pendengar jaringan, berjalan di bawah penjadwalan preemptive.

  • Penjadwal tersembunyi tidak memproses permintaan pengguna biasa. Penjadwal DAC adalah pengecualian. Penjadwal DAC ini memiliki satu utas untuk memproses permintaan.

B. Memantau penjadwal yang tidak terhidung dalam sistem yang sibuk

Kueri berikut menunjukkan status penjadwal nonhidden yang sangat dimuat, di mana ada lebih banyak permintaan daripada yang dapat ditangani oleh pekerja yang tersedia. Dalam contoh ini, 256 pekerja diberi tugas. Beberapa tugas sedang menunggu penugasan kepada pekerja. Jumlah yang dapat dijalankan lebih rendah menyiratkan bahwa beberapa tugas sedang menunggu sumber daya.

Catatan

Anda dapat menemukan status pekerja dengan mengkueri sys.dm_os_workers. Untuk informasi selengkapnya, lihat sys.dm_os_workers (Transact-SQL).

Berikut adalah kuerinya:

SELECT  
    scheduler_id,  
    cpu_id,  
    current_tasks_count,  
    runnable_tasks_count,  
    current_workers_count,  
    active_workers_count,  
    work_queue_count  
  FROM sys.dm_os_schedulers  
  WHERE scheduler_id < 255;  

Berikut adalah hasil yang ditetapkan.

scheduler_id current_tasks_count runnable_tasks_count  
------------ ------------------- --------------------  
0            144                 0                     
1            147                 1                     
  
current_workers_count active_workers_count work_queue_count  
--------------------- -------------------- --------------------  
128                   125                  16  
128                   126                  19  

Sebagai perbandingan, hasil berikut menunjukkan beberapa tugas yang dapat dijalankan di mana tidak ada tugas yang menunggu untuk mendapatkan pekerja. ini work_queue_count0 untuk kedua penjadwal.

scheduler_id current_tasks_count runnable_tasks_count  
------------ ------------------- --------------------  
0            107                 98                    
1            110                 100                   
  
current_workers_count active_workers_count work_queue_count  
--------------------- -------------------- --------------------  
128                   104                  0  
128                   108                  0  

Baca juga

Tampilan Manajemen Dinamis Terkait Sistem Operasi SQL Server (Transact-SQL)