Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Microsoft Fabric'te SQL Veritabanı
SQL Server'da her zamanlayıcının tek bir işlemciye eşlendiği zamanlayıcı başına bir satır döndürür. Zamanlayıcının koşulunu izlemek veya kaçak görevleri tanımlamak için bu görünümü kullanın. Zamanlayıcılar hakkında daha fazla bilgi için Thread ve Görev Mimarisi Rehberi'ne bakınız.
Uyarı
Bunu Azure Synapse Analytics veya Analytics Platform System (PDW) olarak adlandırmak için sys.dm_pdw_nodes_os_schedulers adını kullanın. Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.
| Sütun adı | Veri türü | Description |
|---|---|---|
| scheduler_address | varbinary(8) | Zamanlayıcının bellek adresi. Null olamaz. |
| parent_node_id | int | Zamanlayıcının ait olduğu düğümün kimliği, yani ana düğüm olarak da bilinir. Bu, bir düzensiz bellek erişimi (NUMA) düğümünü temsil eder. Null olamaz. |
| zamanlayıcı_id | int | Zamanlayıcının kimliği. Düzenli sorgular yürütmek için kullanılan tüm zamanlayıcıların ID numaraları 1048576'ten küçüktür. 1048576'den büyük veya eşit ID'ye sahip zamanlayıcılar, SQL Server tarafından dahili olarak kullanılır, örneğin özel yönetici bağlantı zamanlayıcısı. Null olamaz. |
| cpu_id | smallint | Zamanlayıcıya atanmış CPU ID. Null olamaz. Not: 255, SQL Server 2005 (9.x)'deki gibi herhangi bir yakınlık belirtmez. Ek yakınlık bilgileri için sys.dm_os_threads (Transact-SQL) bölümüne bakınız. |
| statü | nvarchar(60) | Zamanlayıcının durumunu gösterir. Aşağıdaki değerlerden biri olabilir: - GIZLI ÇEVRIMIÇI - GIZLI ÇEVRIMDİRİŞ - ÇEVRIMIÇI GÖRÜNÜR - GÖRÜNÜR ÇEVRIMDİRİŞ - VISIBLE ONLINE (DAC) - HOT_ADDED Null olamaz. HIDDEN zamanlayıcılar, Veritabanı Motoru dahili talepleri işlemek için kullanılır. VISIBLE zamanlayıcılar kullanıcı taleplerini işlemek için kullanılır. Çevrimdışı zamanlayıcılar, affinity maskesinde çevrimdışı olan ve bu nedenle herhangi bir isteği işlemek için kullanılmayan işlemcilere eşlenir. ONLINE zamanlayıcılar, affinity maskesinde çevrimiçi olan ve iş parçacıklarını işlemeye açık olan işlemcilere eşlenir. DAC, zamanlayıcının özel bir yönetici bağlantısı altında çalıştığını gösterir. HOT ADDED, zamanlayıcıların bir sıcak ekleme CPU olayına yanıt olarak eklendiğini gösterir. |
| is_online | bit | SQL Server sunucudaki mevcut işlemcilerin sadece bazılarını kullanacak şekilde yapılandırılmışsa, bu yapılandırma bazı zamanlayıcıların affinity maskesinde olmayan işlemcilere eşlendiği anlamına gelebilir. Eğer durum buysa, bu sütun 0 döner. Bu değer, zamanlayıcının sorguları veya toplu işleri işlemek için kullanılmadığı anlamına gelir. Null olamaz. |
| is_idle | bit | 1 = Zamanlayıcı boşta. Şu anda hiçbir çalışan çalışmakta değil. Null olamaz. |
| preemptive_switches_count | int | Bu zamanlayıcıdaki çalışanların kaç kez önleyici moda geçtiği. SQL Server dışındaki kodu (örneğin, genişletilmiş saklı yordamlar ve dağıtılmış sorgular) yürütmek için, iş parçacığının önleyici olmayan zamanlayıcının denetimi dışında yürütülmesi gerekir. Bunu yapmak için bir çalışan önalımlı moda geçer. |
| context_switches_count | int | Bu zamanlayıcıda gerçekleşen bağlam değişimlerinin sayısı. Null olamaz. Diğer çalışanların çalışabilmesi için, mevcut çalışan işçi zamanlayıcı kontrolünü bırakmak veya bağlamı değiştirmek zorunda kalır. Not: Bir çalışan zamanlayıcıyı teslim edip çalıştırılabilir kuyruğa koyarsa ve başka çalışan bulamazsa, kendisini seçer. Bu durumda context_switches_count güncellenmiyor, ama yield_count güncelleniyor. |
| idle_switches_count | int | Programlayıcının boşta bir etkinliği beklediği kaç kez var. Bu sütun context_switches_count'a benzer. Null olamaz. |
| current_tasks_count | int | Bu zamanlayıcı ile ilişkili mevcut görevlerin sayısı. Bu sayım aşağıdakileri içerir: - Bir çalışanın onları yerine getirmesini bekleyen görevler. - Şu anda bekleyen veya çalışan görevler (SUSPENDED veya RUNNABLE durumda). Bir görev tamamlandığında, bu sayı azalır. Null olamaz. |
| runnable_tasks_count | int | Görev atanmış ve çalıştırılabilir kuyruk üzerinde planlanmayı bekleyen çalışan sayısı. Null olamaz. |
| current_workers_count | int | Bu programlayıcıyla ilişkili çalışan sayısı. Bu sayı, herhangi bir göreve atanmayan çalışanları da kapsar. Null olamaz. |
| active_workers_count | int | Aktif çalışan sayısı. Aktif bir çalışan asla önleyici değildir, ilişkili bir görevi olmalıdır ve ya koşabilir, çalıştırılabilir veya askıya alınmıştır. Null olamaz. |
| work_queue_count | bigint | Bekleyen kuyruk üzerindeki görev sayısı. Bu görevler, bir çalışanın onları almasını bekliyor. Null olamaz. |
| pending_disk_io_count | int | Tamamlanmayı bekleyen bekleyen G/O sayısı. Her zamanlayıcı, bağlam değişikliği olduğunda tamamlanıp tamamlanmadığını belirlemek için bekleyen bir G/O listesi vardır. İstek eklendiğinde sayım artırılır. Bu sayı, talep tamamlandığında azalır. Bu sayı, I/O'nun durumunu göstermez. Null olamaz. |
| load_factor | int | Bu zamanlayıcıda algılanan yükü gösteren iç değer. Bu değer, yeni bir görevin bu zamanlayıcıya mı yoksa başka bir zamanlayıcıya mı eklenmesi gerektiğini belirlemek için kullanılır. Bu değer, zamanlayıcıların eşit şekilde yüklenmediği göründüğünde hata ayıklama amacıyla faydalıdır. Rota kararı, zamanlayıcıdaki yüke göre verilir. SQL Server ayrıca, kaynak edinilecek en iyi konumu belirlemeye yardımcı olmak için düğümler ve zamanlayıcılardan oluşan bir yük faktörü kullanır. Bir görev sıraya alındığında, yük faktörü artar. Bir görev tamamlandığında, yük faktörü azalır. Yük faktörlerinin kullanılması SQL Server OS'nin iş yükünü daha iyi dengelemesine yardımcı oluyor. Null olamaz. |
| yield_count | int | Bu zamanlayıcıda ilerlemeyi göstermek için kullanılan iç değer. Bu değer, Scheduler Monitor tarafından, bir çalışanın diğer çalışanlara zamanında teslim olup olmadığını belirlemek için kullanılır. Bu değer, çalışanın veya görevin yeni bir çalışana geçtiğini göstermez. Null olamaz. |
| last_timer_activity | bigint | CPU ticklerinde, zamanlayıcı zamanlayıcı kuyruğunun zamanlayıcı tarafından son kez kontrol edildiyi zamanlayıcı. Null olamaz. |
| failed_to_create_worker | bit | Bu zamanlayıcıda yeni bir çalışan oluşturulamazsa 1'e ayarlanır. Bu genellikle bellek kısıtlamaları nedeniyle ortaya çıkar. Boş değer atanabilir. |
| active_worker_address | varbinary(8) | Şu anda aktif olan çalışanın bellek adresi. Boş değer atanabilir. Daha fazla bilgi için bkz. sys.dm_os_workers (Transact-SQL). |
| memory_object_address | varbinary(8) | Zamanlayıcı bellek nesnesinin bellek adresi. GEÇERSIZ OLMAZ. |
| task_memory_object_address | varbinary(8) | Görev belleği nesnesinin bellek adresi. Null olamaz. Daha fazla bilgi için sys.dm_os_memory_objects (Transact-SQL) sayfasına bakınız. |
| quantum_length_us | bigint | Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir. SQLOS tarafından kullanılan zamanlayıcı kuantumunu açığa çıkarır. |
| total_cpu_usage_ms | bigint |
Geçerlidir: SQL Server 2016 (13.x) ve sonrası Önleyici olmayan çalışanlar tarafından bildirilen bu zamanlayıcı tarafından tüketilen toplam CPU. Null olamaz. |
| total_cpu_idle_capped_ms | bigint | Yalnızca bilgilendirme amacıyla tanımlanır. Desteklenmiyor. Gelecekteki uyumluluk garanti edilmemektedir. Service Level Objective'e dayalı throttling gösterir, SQL Server'ın Azure dışı sürümleri için her zaman 0 olacaktır. Boş değer atanabilir. |
| total_scheduler_delay_ms | bigint |
Geçerlidir: SQL Server 2016 (13.x) ve sonrası Bir çalışanın değişmesiyle diğerinin işe girmesi arasındaki süre. Önleyici çalışanların bir sonraki önleyici olmayan çalışanın zamanlamasını geciktirmesi veya işletim sisteminin diğer süreçlerden gelen iş parçacıklarını zamanlaması nedeniyle olabilir. Null olamaz. |
| ideal_workers_limit | int |
Geçerlidir: SQL Server 2019 (15.x) ve sonrası Planlama cihazında ideal olarak kaç işçi olması gerektiği. Mevcut çalışanlar dengesiz görev yükü nedeniyle sınırı aşarsa, boş kaldıklarında kesileceklerdir. Null olamaz. |
| pdw_node_id | int |
için geçerlidir: Azure Synapse Analytics, Analiz Platformu Sistemi (PDW) Bu dağıtımın üzerinde olduğu düğümün tanımlayıcısı. |
Permissions
SQL Server ve SQL Yönetilen Örneği'ne VIEW SERVER STATE izni gerekir.
SQL Veritabanı Temel,S0 ve S1 hizmet hedeflerinive elastik havuzlardaki veritabanları için, sunucu yöneticisi hesabı, Microsoft Entra yönetici hesabı veya ##MS_ServerStateReader##sunucu rolü üyeliği gereklidir. Diğer tüm SQL Veritabanı hizmet hedeflerinde, veritabanında VIEW DATABASE STATE izni veya ##MS_ServerStateReader## sunucu rolü üyeliği gereklidir.
SQL Server 2022 ve üzeri için izinler
Sunucuda SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerektirir.
Örnekler
A. Gizli ve gizli olmayan zamanlayıcıların izlenmesi
Aşağıdaki sorgu, SQL Server'daki tüm zamanlayıcılar üzerindeki çalışanların ve görevlerin durumunu çıkarır. Bu sorgu, aşağıdaki özelliklere sahip bir bilgisayar sisteminde yürütülmüştür:
İki işlemci (CPU)
İki (NUMA) düğümü
Her NUMA düğümü için bir CPU
Affinity maski olarak
0x03ayarlandı.
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;
Sonuç kümesi aşağıdadır.
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
Çıktı aşağıdaki bilgileri sağlar:
Beş programcı var. İki zamanlayıcının bir kimlik değeri < 1048576. ID >= 1048576 olan zamanlayıcılar gizli zamanlayıcılar olarak bilinir. Zamanlayıcı
255, özel yönetici bağlantısını (DAC) temsil eder. Her örnek için bir DAC zamanlayıcı vardır. Bellek basıncını koordine eden kaynak monitörleri, her NUMA düğümü için bir tane zamanlayıcı257ve zamanlayıcı258kullanırÇıktıda 23 aktif görev bulunmaktadır. Bu görevler, SQL Server tarafından başlatılan kaynak yönetimi görevlerinin yanı sıra kullanıcı taleplerini de içerir. SQL Server görevlerine örnek olarak RESOURCE MONITOR (her NUMA düğümü için bir tane), LAZY WRITER (HER NUMA DÜĞÜMÜ IÇIN BIR TANE), LOCK MONITOR ve LOG WRITER verilebilir.
NUMA düğümü
0CPU'ya1eşlenir ve NUMA düğümü1CPU'ya0eşlenir. SQL Server genellikle 0 düğüm dışında bir NUMA düğümünde başlar.Geri
0döndüğünderunnable_tasks_count, aktif olarak çalıştırılan görevler yoktur. Ancak, aktif seanslar da olabilir.DAC'ı temsil eden zamanlayıcının
255kendisiyle ilişkili çalışanları3vardır. Bu çalışanlar SQL Server başlangıcında tahsis edilir ve değişmezler. Bu çalışanlar yalnızca DAC sorgularını işlemek için kullanılır. Bu zamanlayıcıdaki iki görev, bir bağlantı yöneticisi ve boşta çalışan bir kişiyi temsil eder.active_workers_countBağlantılı görevleri olan ve önleyici olmayan modda çalışan tüm çalışanları temsil eder. Bazı görevler, örneğin ağ dinleyicileri, önleyici zamanlama altında çalışır.Gizli zamanlayıcılar tipik kullanıcı taleplerini işlemez. DAC zamanlayıcı istisnadır. Bu DAC zamanlayıcının talepleri işlemek için tek bir iş parçacığı vardır.
B. Yoğun bir sistemde gizli olmayan zamanlayıcıların izlenmesi
Aşağıdaki sorgu, mevcut çalışanların işleyebileceğinden daha fazla isteğin bulunduğu ağır yüklü gizli olmayan zamanlayıcıların durumunu gösterir. Bu örnekte, 256 çalışana görevler verilmiştir. Bazı görevler bir çalışana atama bekler. Daha düşük çalıştırılabilir sayı, birden fazla görevin bir kaynak için beklediği anlamına gelir.
Uyarı
İşçilerin durumunu sys.dm_os_workers sorgulayışla öğrenebilirsiniz. Daha fazla bilgi için bkz. sys.dm_os_workers (Transact-SQL).
İşte soru:
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;
Sonuç kümesi aşağıdadır.
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
Karşılaştırma olarak, aşağıdaki sonuç, bir işçi elde etmek için beklemeyen birden fazla çalıştırılabilir görevi gösterir. Her iki programlayıcı için de geçerlidir work_queue_count0 .
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
Ayrıca bakınız
SQL Server İşletim Sistemiyle İlgili Dinamik Yönetim Görünümleri (Transact-SQL)