sys.dm_os_schedulers (T-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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 set hasilnya.
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 penjadwal257
dan penjadwal258
, satu per simpul NUMAAda 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 simpul1
CPU1
dan NUMA dipetakan ke CPU0
. SQL Server biasanya dimulai pada simpul NUMA selain simpul 0.Dengan
runnable_tasks_count
mengembalikan0
, tidak ada tugas yang berjalan secara aktif. Namun, sesi aktif mungkin ada.Penjadwal
255
yang mewakili DAC memiliki3
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 set hasilnya.
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_count
0
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
Lihat juga
Tampilan Manajemen Dinamis Terkait Sistem Operasi SQL Server (Transact-SQL)