Aracılığıyla paylaş


sys.dm_exec_requests (Transact-SQL)

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

SQL Server'da yürütülen her istek hakkındaki bilgileri döndürür. İstekler hakkında daha fazla bilgi için bkz. İş parçacığı ve görev mimarisi kılavuzu.

Uyarı

Bunu Azure Synapse Analytics veya Analytics Platform Sistemi'ndeki (PDW) ayrılmış SQL havuzundan çağırmak için bkz. sys.dm_pdw_exec_requests. Sunucusuz SQL havuzu veya Microsoft Fabric için kullanın sys.dm_exec_requests.

Sütun adı Veri türü Açıklama
session_id smallint Bu isteğin ilişkili olduğu oturumun kimliği. Boş değer atanamaz.
request_id int İsteğin kimliği. Oturum bağlamında benzersiz. Boş değer atanamaz.
start_time tarih ve saat İstek geldiğinde zaman damgası. Boş değer atanamaz.
status nvarchar(30) İsteğin durumu. Aşağıdaki değerlerden biri olabilir:

arka plan
Geri alma
çalışıyor
çalıştırılabilir
uyku
Askıya alınmış

Boş değer atanamaz.
command nvarchar(32) İşlenmekte olan geçerli komut türünü tanımlar. Yaygın komut türleri aşağıdaki değerleri içerir:

SEÇ
INSERT
GÜNCELLEME
SİLMEK
YEDEKLEME GÜNLÜĞÜ
YEDEKLEME VERITABANı
DBCC
İÇİN

İstek metni, istek için karşılık gelen sql_handle ile kullanılarak sys.dm_exec_sql_text alınabilir. İç sistem işlemleri, komutu gerçekleştirdikleri görev türüne göre ayarlar. Görevler aşağıdaki değerleri içerebilir:

LOCK MONITOR
CHECKPOINTLAZY
YAZAR

Boş değer atanamaz.
sql_handle varbinary(64) Sorgunun parçası olduğu toplu işlemi veya saklı yordamı benzersiz olarak tanımlayan belirteç. Nullable.
statement_start_offset int 0 ile başlayan bayt cinsinden, şu anda yürütülmekte olan toplu iş veya kalıcı nesne için yürütülmekte olan deyiminin başlangıç konumunu gösterir. İstek için şu anda yürütülen deyimini almak için , statement_end_offsetve sys.dm_exec_sql_text dinamik yönetim işleviyle sql_handlebirlikte kullanılabilir. Nullable.
statement_end_offset int 0 ile başlayarak, şu anda yürütülen toplu iş veya kalıcı nesne için şu anda yürütülen deyiminin bitiş konumunu bayt cinsinden gösterir. İstek için şu anda yürütülen deyimini almak için , statement_start_offsetve sys.dm_exec_sql_text dinamik yönetim işleviyle sql_handlebirlikte kullanılabilir. Nullable.
plan_handle varbinary(64) Şu anda yürütülmekte olan bir toplu iş için sorgu yürütme planını benzersiz olarak tanımlayan belirteç. Nullable.
database_id smallint İsteğin yürütülmekte olduğu veritabanının kimliği. Boş değer atanamaz.

Azure SQL Veritabanı'nda değerler tek bir veritabanı veya elastik havuz içinde benzersizdir, ancak mantıksal sunucu içinde değildir.
user_id int İsteği gönderen kullanıcının kimliği. Boş değer atanamaz.
connection_id benzersiz tanımlayıcı İsteğin geldiği bağlantının kimliği. Nullable.
blocking_session_id smallint İsteği engelleyen oturumun kimliği. Bu sütun veya 0ise NULL istek engellenmez veya engelleme oturumunun oturum bilgileri kullanılamaz (veya tanımlanamaz). Daha fazla bilgi için bkz. SQL Server engelleme sorunlarını anlama ve çözme.

-2 = Engelleyici kaynak yalnız bırakılmış dağıtılmış bir işleme aittir.

-3 = Engelleyici kaynak ertelenen bir kurtarma işlemine aittir.

-4 = session_id engelleyen mandal sahibinin iç mandal durumu geçişleri nedeniyle şu anda belirlenemedi.

-5 = session_id engelleyici mandal sahibi belirlenemedi çünkü bu mandal türü için izlenmedi (örneğin, bir SH mandalı için).

Tek başına, blocking_session_id-5 bir performans sorununa işaret etmez. -5 oturumun zaman uyumsuz bir eylemin tamamlanmasını beklediğinin göstergesidir. Kullanılmadan önce -5 , aynı oturum hala bekleme durumunda olmasına rağmen öğesini göstermeliydi blocking_session_id0.

İş yüküne bağlı olarak gözlemleme blocking_session_id = -5 yaygın bir durum olabilir.
wait_type nvarchar(60) İstek şu anda engellenmişse, bu sütun bekleme türünü döndürür. Nullable.

Bekleme türleri hakkında bilgi için bkz. sys.dm_os_wait_stats.
wait_time int İstek şu anda engellenmişse, bu sütun geçerli beklemenin süresini milisaniye cinsinden döndürür. Boş değer atanamaz.
last_wait_type nvarchar(60) Bu istek daha önce engellenmişse, bu sütun son beklemenin türünü döndürür. Boş değer atanamaz.
wait_resource nvarchar(256) İstek şu anda engellenmişse, bu sütun isteğin şu anda beklediği kaynağı döndürür. Boş değer atanamaz.
open_transaction_count int Bu istek için açık olan işlem sayısı. Boş değer atanamaz.
open_resultset_count int Bu istek için açık olan sonuç kümelerinin sayısı. Boş değer atanamaz.
transaction_id bigint Bu isteğin yürütüldiği işlemin kimliği. Boş değer atanamaz.
context_info varbinary(128) Oturumun değerini CONTEXT_INFO. Nullable.
percent_complete Gerçek Aşağıdaki komutlar için tamamlanan çalışma yüzdesi:

ALTER INDEX REORGANIZE
AUTO_SHRINK seçeneği ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Boş değer atanamaz.
estimated_completion_time bigint Yalnızca dahili. Boş değer atanamaz.
cpu_time int İstek tarafından kullanılan milisaniye cinsinden CPU süresi. Boş değer atanamaz.
total_elapsed_time int İsteğin gelmesinden bu yana geçen toplam süre milisaniye cinsindendir. Boş değer atanamaz.
scheduler_id int Bu isteği zamanlayan zamanlayıcının kimliği. Nullable.
task_address varbinary(8) Bu istekle ilişkili göreve ayrılan bellek adresi. Nullable.
reads bigint Bu istek tarafından gerçekleştirilen okuma sayısı. Boş değer atanamaz.
writes bigint Bu istek tarafından gerçekleştirilen yazma sayısı. Boş değer atanamaz.
logical_reads bigint İstek tarafından gerçekleştirilen mantıksal okuma sayısı. Boş değer atanamaz.
text_size int Bu istek için TEXTSIZE ayarı. Boş değer atanamaz.
language nvarchar(128) İstek için dil ayarı. Nullable.
date_format nvarchar(3) İstek için DATEFORMAT ayarı. Nullable.
date_first smallint İstek için DATEFIRST ayarı. Boş değer atanamaz.
quoted_identifier bit 1 = QUOTED_IDENTIFIER istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
arithabort bit 1 = ARITHABORT ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
ansi_null_dflt_on bit 1 = ANSI_NULL_DFLT_ON ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
ansi_defaults bit 1 = ANSI_DEFAULTS ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
ansi_warnings bit 1 = ANSI_WARNINGS ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
ansi_padding bit 1 = ANSI_PADDING ayarı istek için ON'dır.

Aksi takdirde, 0 olur.

Boş değer atanamaz.
ansi_nulls bit 1 = ANSI_NULLS ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
concat_null_yields_null bit 1 = CONCAT_NULL_YIELDS_NULL ayarı istek için ON'dır. Aksi takdirde, 0 olur.

Boş değer atanamaz.
transaction_isolation_level smallint Bu istek için işlemin oluşturulduğu yalıtım düzeyi. Boş değer atanamaz.
0 = Belirtilmemiş
1 = ReadUncommitted
2 = ReadCommitted
3 = Yinelenebilir
4 = Serileştirilebilir
5 = Anlık Görüntü
lock_timeout int Bu istek için zaman aşımı süresini milisaniye olarak kilitleyin. Boş değer atanamaz.
deadlock_priority int İstek için DEADLOCK_PRIORITY ayarı. Boş değer atanamaz.
row_count bigint Bu istek tarafından istemciye döndürülen satır sayısı. Boş değer atanamaz.
prev_error int İsteğin yürütülmesi sırasında oluşan son hata. Boş değer atanamaz.
nest_level int İstekte yürütülen kodun geçerli iç içe yerleştirme düzeyi. Boş değer atanamaz.
granted_query_memory int İstekte sorgunun yürütülmesi için ayrılan sayfa sayısı. Boş değer atanamaz.
executing_managed_code bit Belirli bir isteğin şu anda yordamlar, türler ve tetikleyiciler gibi ortak dil çalışma zamanı nesnelerini yürüterek yürütmediğini gösterir. ortak dil çalışma zamanı içinden Transact-SQL çalıştırırken bile yığında ortak dil çalışma zamanı nesnesinin tam zamanı için ayarlanır. Boş değer atanamaz.
group_id int Bu sorgunun ait olduğu iş yükü grubunun kimliği. Boş değer atanamaz.
query_hash ikili (8) Sorguda hesaplanan ve benzer mantığa sahip sorguları tanımlamak için kullanılan ikili karma değeri. Sorgu karması kullanarak yalnızca değişmez değerlerle farklılık gösteren sorguların toplam kaynak kullanımını belirleyebilirsiniz.
query_plan_hash ikili (8) Sorgu yürütme planında hesaplanan ve benzer sorgu yürütme planlarını tanımlamak için kullanılan ikili karma değer. Benzer yürütme planlarına sahip sorguların toplu maliyetini bulmak için sorgu planı karması kullanabilirsiniz.
statement_sql_handle varbinary(64) için geçerlidir: SQL Server 2014 (12.x) ve üzeri.

sql_handle öğesini seçin.

Bu sütun, NULL Veritabanı için Sorgu Deposu'nun etkinleştirilmemiş olmasıdır.
statement_context_id bigint için geçerlidir: SQL Server 2014 (12.x) ve üzeri.

için isteğe bağlı yabancı anahtar sys.query_context_settings.

Bu sütun, NULL Veritabanı için Sorgu Deposu'nun etkinleştirilmemiş olmasıdır.
dop int için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

Sorgunun paralellik derecesi.
parallel_worker_count int için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

Bu bir paralel sorguysa ayrılmış paralel çalışan sayısı.
external_script_request_id benzersiz tanımlayıcı için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

Geçerli istekle ilişkili dış betik isteği kimliği.
is_resumable bit için geçerlidir: SQL Server 2017 (14.x) ve üzeri.

İsteğin devam ettirilebilir bir dizin işlemi olup olmadığını gösterir.
page_resource ikili (8) için geçerlidir: SQL Server 2019 (15.x)

Sütunda sayfa varsa wait_resource sayfa kaynağının 8 baytlık onaltılık gösterimi. Daha fazla bilgi için bkz. sys.fn_PageResCracker.
page_server_reads bigint Şunlar için geçerlidir: Azure SQL Veritabanı Hiper Ölçek

Bu istek tarafından gerçekleştirilen sayfa sunucusu okuma sayısı. Boş değer atanamaz.
dist_statement_id benzersiz tanımlayıcı Şunlar için geçerlidir: SQL Server 2022 ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics (yalnızca sunucusuz havuzlar) ve Microsoft Fabric

Gönderilen isteğin deyiminin benzersiz kimliği. Boş değer atanamaz.

Açıklamalar

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. Bu dinamik yönetim görünümü tarafından döndürülen zaman değerleri, önleyici modda harcanan zamanı içermez.

Paralel istekleri satır modunda yürütürken, SQL Server kendilerine atanan görevleri tamamlamaktan sorumlu çalışan iş parçacıklarını koordine etmek için bir çalışan iş parçacığı atar. Bu DMV'de istek için yalnızca koordinatör iş parçacığı görünür. , writes, logical_readsve row_count sütunları readskoordinatör iş parçacığı için güncelleştirilmez. , , last_wait_typewait_time, ve granted_query_memorywait_resourcesütunları wait_typeyalnızca koordinatör iş parçacığı için güncelleştirilir. Daha fazla bilgi içinİş Parçacığı ve görev mimarisi kılavuzuna bakın.

sütun, wait_resourcesys.dm_tran_locks ile benzer bilgiler resource_description içerir ancak farklı biçimlendirilir.

İzinler

Kullanıcının VIEW SERVER STATE sunucuda izni varsa, kullanıcı SQL Server örneğinde tüm yürütme oturumlarını görür; aksi takdirde, kullanıcı yalnızca geçerli oturumu görür. VIEW SERVER STATE Azure SQL Veritabanı'nda verilemiyor, bu nedenle sys.dm_exec_requests her zaman geçerli bağlantıyla sınırlıdır.

Kullanılabilirlik grubu senaryolarında, ikincil çoğaltma salt okunur amaca ayarlanmışsa, ikincil çoğaltmaya yönelik bağlantı, bağlantı dizesi parametrelerinde uygulama amacını ekleyerek applicationintent=readonlybelirtmelidir. Aksi takdirde, erişim denetimi sys.dm_exec_requests , izin mevcut olsa VIEW SERVER STATE bile kullanılabilirlik grubundaki veritabanları için geçirilmez.

SQL Server 2022 (16.x) ve sonraki sürümler için sunucuda sys.dm_exec_requests SUNUCU PERFORMANS DURUMUNU GÖRÜNTÜLE izni gerekir.

Örnekler

A. Çalışan bir toplu iş için sorgu metnini bulma

Aşağıdaki örnek sorgu, ilginç sorguyu bulmak ve çıktıdan kopyalamak sql_handle için sorgularsys.dm_exec_requests.

SELECT * FROM sys.dm_exec_requests;
GO

Ardından, deyimi metnini almak için ile kopyalanan sql_handle sistem işlevini sys.dm_exec_sql_text(sql_handle)kullanın.

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. Etkin istekleri göster

Aşağıdaki örnekte, kendi oturumunuz ( ) hariç, SQL Server veri ambarınızda çalışmakta olan tüm sorgular gösterilmektedir@@SPID. her isteğin tam sorgu metnini almak için ile sys.dm_exec_sql_text kullanır CROSS APPLY ve kullanıcıya herhangi bir konak bilgisi eklemek için ile birleşirsys.dm_exec_sessions. Filtre, session_id <> @@SPID sonuçlarda kendi sorgunuzu görmemenizi sağlar.

SELECT r.session_id,
       r.status,
       r.command,
       r.start_time,
       r.total_elapsed_time / 1000.00 AS elapsed_seconds,
       r.cpu_time / 1000.00 AS cpu_seconds,
       r.reads,
       r.writes,
       r.logical_reads,
       r.row_count,
       s.login_name,
       s.host_name,
       t.text AS query_text
FROM sys.dm_exec_requests AS r
     INNER JOIN sys.dm_exec_sessions AS s
         ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
ORDER BY r.start_time DESC;

C. Çalışan bir toplu işlemi tutan tüm kilitleri bulma

Aşağıdaki örnek, ilginç toplu işlemi bulmak ve çıktıdan kopyalamak transaction_id için sorgularsys.dm_exec_requests.

SELECT * FROM sys.dm_exec_requests;
GO

Ardından, kilit bilgilerini bulmak için sistem işleviyle sys.dm_tran_lockskopyalanan transaction_id öğesini kullanın.

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

D. Şu anda engellenen tüm istekleri bulma

Aşağıdaki örnek, engellenen istekler hakkında bilgi bulmak için sorgular sys.dm_exec_requests .

SELECT session_id,
       status,
       blocking_session_id,
       wait_type,
       wait_time,
       wait_resource,
       transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO

E. Mevcut istekleri CPU'ya göre sıralama

SELECT [req].[session_id],
    [req].[start_time],
    [req].[cpu_time] AS [cpu_time_ms],
    OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
    SUBSTRING(
        REPLACE(
            REPLACE(
                SUBSTRING(
                    [ST].[text], ([req].[statement_start_offset] / 2) + 1,
                    ((CASE [req].[statement_end_offset]
                            WHEN -1 THEN DATALENGTH([ST].[text])
                            ELSE [req].[statement_end_offset]
                        END - [req].[statement_start_offset]
                        ) / 2
                    ) + 1
                ), CHAR(10), ' '
            ), CHAR(13), ' '
        ), 1, 512
    ) AS [statement_text]
FROM
    [sys].[dm_exec_requests] AS [req]
    CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
    [req].[cpu_time] DESC;
GO