Aracılığıyla paylaş


sys.dm_os_workers (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric'te SQL Veritabanı

Sistemdeki her çalışan için bir satır döndürür. İşçiler hakkında daha fazla bilgi için Thread and Task Architecture Guide'a bakınız.

Uyarı

Bunu Azure Synapse Analytics veya Analytics Platform System (PDW) olarak adlandırmak için sys.dm_pdw_nodes_os_workers 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
çalışan_adresi varbinary(8) Çalışanın hafıza adresi.
statü int Yalnızca iç kullanım.
is_preemptive bit 1 = Çalışan önleyici zamanlama ile çalışıyor. Harici kod çalıştıran herhangi bir çalışan önemci zamanlama altında çalıştırılır.
is_fiber bit 1 = İşçi hafif havuzlama ile koşuyor. Daha fazla bilgi için sp_configure (Transact-SQL) bölümüne bakınız.
is_sick bit 1 = Çalışan spin kilidi elde etmeye çalışırken sıkışıp kalır. Bu bit ayarlanmışsa, bu sık erişilen bir nesnede çatışma sorunu olabilir.
is_in_cc_exception bit 1 = Worker şu anda SQL Server dışı bir istisna ile ilgilenmektedir.
is_fatal_exception bit Bu işçinin ölümcül bir istisna alıp almadığını belirtir.
is_inside_catch bit 1 = Çalışan şu anda bir istisna ile ilgileniyor.
is_in_polling_io_completion_routine bit 1 = Çalışan şu anda bekleyen bir G/Ç için bir G/Ç tamamlama rutini çalıştırıyor. Daha fazla bilgi için bkz. sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Bu işçi tarafından gerçekleştirilen zamanlayıcı bağlam anahtarlarının sayısı.
pending_io_count int Bu çalışan tarafından gerçekleştirilen fiziksel I/O sayısı.
pending_io_byte_count bigint Bu işçi için bekleyen tüm fiziksel giriş/girişler için toplam bayt sayısı.
pending_io_byte_average int Bu çalışan için fiziksel giriş/o için ortalama bayt sayısı.
wait_started_ms_ticks bigint ms_ticks yılında, bu işçinin ASKIYA ALMA durumuna girdiği zaman. Bu değeri ms_ticks'den sys.dm_os_sys_info içinde çıkarsak, işçinin beklediği milisaniye sayısını döndürür.
wait_resumed_ms_ticks bigint ms_ticks yılında, bu işçi RUNNABLE durumuna girdiğinde. Bu değeri ms_ticks sys.dm_os_sys_info içindeki değerden çıkarmak, çalışanın çalıştırılabilir kuyrakta bulunduğu milisaniye sayısını döndürür.
task_bound_ms_ticks bigint ms_ticks zamanında, bir görevin bu işçiye bağlı olduğu zaman.
worker_created_ms_ticks bigint Bir işçinin yaratıldığı zaman ms_ticks.
exception_num int Bu işçinin karşılaştığı son istisnanın hata numarası.
exception_severity int Bu işçinin karşılaştığı son istisnanın ciddiyeti.
exception_address varbinary(8) İstisna atan kod adresi
ilgi bigint İşçinin iplik yakınlığı. sys.dm_os_threads (Transact-SQL) içindeki ipliğin yakınlığıyla eşleşir.
state nvarchar(60) İşçi durumu. Aşağıdaki değerlerden biri olabilir:

INIT = Işçi şu anda başlatılıyor.

KOŞMA = Çalışan şu anda ya önleyici olmayan ya da önleyici olarak çalışıyor.

RUNNABLE = Çalışan zamanlayıcıda çalışmaya hazırdır.

ASKIYA ALMIŞ = Çalışan şu anda askıya alınmış durumda ve bir olayın sinyal göndermesini bekliyor.
start_quantum bigint Zaman, milisaniye cinsinden, bu işçinin mevcut çalışmasının başında.
end_quantum bigint Zaman, milisaniye cinsinden, bu işçinin mevcut süresinin sonunda.
son_bekleme_tipi nvarchar(60) Son bekleme türü. Bekleme türlerinin listesi için sys.dm_os_wait_stats (Transact-SQL) bölümüne bakınız.
return_code int Son beklemeden geri değer. Aşağıdaki değerlerden biri olabilir:

0 =BAŞARI

3 = ÇIKIŞ

4 = PREMATURE_WAKEUP

258 = MOLA
quantum_used bigint Yalnızca iç kullanım.
max_quantum bigint Yalnızca iç kullanım.
boost_count int Yalnızca iç kullanım.
tasks_processed_count int Bu çalışanın işlediği görev sayısı.
fiber_address varbinary(8) Bu işçinin ilişkilendirildiği fiberin bellek adresi.

NULL = SQL Server, hafif havuzlama için yapılandırılmamıştır.
görev_adresi varbinary(8) Mevcut görevin bellek adresi. Daha fazla bilgi için sys.dm_os_tasks (Transact-SQL) sayfasına bakınız.
memory_object_address varbinary(8) İşçi bellek nesnesinin bellek adresi. Daha fazla bilgi için sys.dm_os_memory_objects (Transact-SQL) sayfasına bakınız.
thread_address varbinary(8) Bu işçiyle ilişkili iş parçacığının bellek adresi. Daha fazla bilgi için sys.dm_os_threads (Transact-SQL) bölümüne bakınız.
signal_worker_address varbinary(8) Bu nesneyi en son işaret eden işçinin bellek adresi. Daha fazla bilgi için bkz. sys.dm_os_workers.
scheduler_address varbinary(8) Zamanlayıcının bellek adresi. Daha fazla bilgi için sys.dm_os_schedulers (Transact-SQL) bölümüne bakınız.
processor_group smallint Bu iş parçacığına atanan işlemci grup kimliğini saklar.
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ı.

Açıklamalar

Eğer işçi durumu ÇALIŞIYORSA ve işçi önleyici olmayan çalışıyorsa, işçi adresi sys.dm_os_schedulers'daki active_worker_address ile eşleşir.

Bir olay bekleyen bir çalışan sinyal edildiğinde, çalışan çalıştırılabilir kuyruğun başına yerleştirilir. SQL Server bunun bin kez üst üste gerçekleşmesine izin verir ve ardından çalışan kuyruğun sonuna yerleştirilir. Bir çalışanı kuyruğun sonuna taşımak bazı performans etkileri yaratır.

Permissions

SQL Server'da VIEW SERVER STATE izni gerekir.
SQL Veritabanı Premium Katmanlarında, veritabanında izin gerektirir VIEW DATABASE STATE . SQL Veritabanı Standardı ve Temel Katmanlar'da ise rol üyeliği veya bir Azure Active Directory admin hesap gerektirirServer Admin.

SQL Server 2022 ve üzeri için izinler

Sunucuda SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerektirir.

Örnekler

Aşağıdaki sorguyu kullanarak bir çalışanın ne kadar süredir ASKIYA VERİLDİR veya ÇALIŞTIRILABILIR durumda çalıştığını öğrenebilirsiniz.

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;  

Sonuç kümesi aşağıdadır.

 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  

Çıktıda, w_runnable ve w_suspended eşit olduğunda, bu durum işçinin ASKIYA DURUMUNDA olduğu zamanı temsil eder. Aksi takdirde, w_runnable çalışanın RUNNABLE durumunda harcadığı zamanı temsil eder. Çıkışta oturum 52SUSPENDED milisaniyelerdir 35,094 .

Ayrıca Bkz.

SQL Server İşletim Sistemiyle İlgili Dinamik Yönetim Görünümleri (Transact-SQL)
Sorgu İşleme Mimarisi Kılavuzu
İş Başlığı ve Görev Mimarisi Rehberi