Aracılığıyla paylaş


sys.dm_exec_plan_attributes (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Plan handle tarafından belirtilen plan için plan için bir satır özniteliği döndürür. Bu tablo değerli fonksiyonu kullanarak belirli bir plan hakkında bilgi alabilirsiniz; örneğin önbellek anahtar değerleri veya planın güncel eşzamanlı yürütme sayısı.

Uyarı

Bu fonksiyon aracılığıyla geri dönen bazı bilgiler, sys.syscacheobjects geriye doğru uyumluluk görünümüne eşlenir.

Sözdizimi

sys.dm_exec_plan_attributes ( plan_handle )  

Arguments

plan_handle
Planı plan önbelleğinde bulunan ve yürütülmüş bir grup için sorgu planını benzersiz şekilde tanımlar. plan_handlevarbinary(64) şeklindedir. Plan kolu sys.dm_exec_cached_plans dinamik yönetim görünümünden alınabilir.

Döndürülen Tablo

Sütun adı Veri türü Description
öznitelik varchar(128) Bu planla ilişkili özniteliğin adı. Bunun hemen altındaki tabloda olası nitelikler, veri türleri ve açıklamalar listelenir.
value sql_variant Bu planla ilişkili özniteliğin değeri.
is_cache_key bit Niteliğin planın önbellek arama anahtarının bir parçası olarak kullanılıp kullanılmadığını gösterir.

Yukarıdaki tablodan, öznitelik aşağıdaki değerlere sahip olabilir:

Özellik Veri türü Description
set_options int Planın derlendiği opsiyon değerlerini gösterir.
nesne tanımlayıcı int Önbellekte bir nesneyi aramak için kullanılan ana anahtarlardan biri. Bu, veritabanı nesneleri (prosedürler, görünümler, tetikleyiciler vb.) için sys.objects'te saklanan nesne kimliğidir. "Adhoc" veya "Prepared" tipindeki planlar için, toplu metnin iç hash'idir.
dbid int Planın atıfta bulunduğu varlığın yer aldığı veritabanının kimliği midir.

Ad hoc veya hazırlanmış planlar için, toplu çalışmanın yapıldığı veritabanı kimliğidir.
dbid_execute int Kaynak veritabanında depolanan sistem nesneleri için, önbelleğe alınan planın yürütüldiği veritabanı kimliği. Diğer tüm vakalarda 0.
kullanıcı_kimliği int -2 değeri, gönderilen grubun örtük isim çözümlemesine bağlı olmadığını ve farklı kullanıcılar arasında paylaşılabileceğini gösterir. Bu tercih edilen yöntemdir. Diğer herhangi bir değer, veritabanında sorgu gönderen kullanıcının kullanıcı kimliğini temsil eder.
language_id smallint Önbellek nesnesini oluşturan bağlantının dilinin kimliği. Daha fazla bilgi için bkz . sys.syslanguages (Transact-SQL).
date_format smallint Önbellek nesnesini oluşturan bağlantının tarih formatı. Daha fazla bilgi için bkz. SET DATEFORMAT (Transact-SQL).
date_first tinyint Tarih önce değer. Daha fazla bilgi için bkz . SET DATEFIRST (Transact-SQL).
compat_level tinyint Sorgu planının derlendiği bağlamda veritabanında belirlenen uyumluluk seviyesini temsil eder. Döndürülen uyumluluk seviyesi, geçici ifadeler için mevcut veritabanı bağlamının uyumluluk seviyesidir ve sorgu ipucu QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'den etkilenmez. Depolanan bir prosedür veya fonksiyonda bulunan ifadeler için, bu işlem veya fonksiyonun oluşturulduğu veritabanının uyumluluk seviyesine karşılık gelir.
statü int Önbellek arama anahtarının parçası olan dahili durum bitleri.
required_cursor_options int İmleç türü gibi kullanıcı tarafından belirtilen imleç seçenekleri.
acceptable_cursor_options int SQL Server'ın deyiminin yürütülmesini desteklemek için örtük olarak dönüştürülebileceği imleç seçenekleri. Örneğin, kullanıcı dinamik bir imleç belirtebilir, ancak sorgu optimizatoru bu imleç tipini statik bir imleceğe dönüştürebilir.
merge_action_type smallint MERGE ifadesinin sonucu olarak kullanılan tetikleyici yürütme planı türü.

0, tetikleyici olmayan bir planı, MERGE ifadesi sonucu yürütülmeyen tetikleyici planı veya sadece DELETE eylemini belirten bir MERGE ifadesi sonucu çalıştırılan tetikleyici planı gösterir.

1, bir MERGE ifadesi sonucu çalışan bir INSERT tetikleyici planını gösterir.

2, MERGE ifadesi sonucu çalışan bir UPDATE tetikleyici planını gösterir.

3, karşılık gelen INSERT veya UPDATE eylemini içeren bir MERGE ifadesinin sonucu olarak çalışan bir DELETE tetikleme planını gösterir.

Zincirleme eylemlerle çalıştırılan iç içe tetikleyiciler için, bu değer zincirleme işlemi oluşturan MERGE i'ninin eylemidir.
is_replication_specific int Bu planın derlendiği oturumun, SQL Server örneğine belgelenmemiş bir bağlantı özelliği kullanarak bağlandığını gösterir; bu özellik, sunucunun oturumu replikasyon bileşenleri tarafından oluşturulmuş bir oturum olarak tanımlamasına olanak tanır ve böylece sunucunun belirli fonksiyonel yönlerinin davranışı, bu çoğaltma bileşeninin beklediği şekilde değişir.
optional_spid smallint Bağlantı session_id (spid), yeniden derleme sayısını azaltmak için önbellek anahtarının bir parçası olur. Bu, dinamik olarak bağlı olmayan geçici tabloları içeren bir planın tek bir oturum için yeniden derlemelerini engeller.
optional_clr_trigger_dbid int Sadece CLR DML tetikleyici durumunda dolduruluyor. Varlığı içeren veritabanının kimliği.

Başka herhangi bir nesne türü için, sıfır döner.
optional_clr_trigger_objid int Sadece CLR DML tetikleyici durumunda dolduruluyor. sys.objects'te saklanan nesne kimliği.

Başka herhangi bir nesne türü için, sıfır döner.
parent_plan_handle varbinary(64) Her zaman NULL.
is_azure_user_plan tinyint 1, bir kullanıcı tarafından başlatılan bir oturumdan Azure SQL Veritabanı'nda yürütülen sorgular için.

0, son kullanıcı tarafından başlatılmayan, ancak Azure altyapısı içinde çalışan ve telemetri toplama veya idari görevler yürütme amacıyla sorgular veren uygulamalar tarafından yürütülmüş sorgular için 0. Müşteriler, is_azure_user_plan = 0 olan sorgular tarafından tüketilen kaynaklar için ücretlendirilmez.

Sadece Azure SQL Database .
inuse_exec_context int Sorgu planını kullanan şu anda çalışan parti sayısı.
free_exec_context int Şu anda kullanılmayan sorgu planı için önbelleğe alınmış yürütme bağlamlarının sayısı.
hits_exec_context int Plan önbelleğinden yürütme bağlamı alınıp tekrar kullanıldığı sayısı, SQL ifadesinin yeniden derlenmesinin ek yükünü azaltıyor. Değer, şimdiye kadar yapılan tüm toplu uygulamaların toplamı.
misses_exec_context int Plan önbelleğinde bir yürütme bağlamının bulunamadığı ve toplu çalıştırma için yeni bir yürütme bağlamının oluşturulduğu sayısı.
removed_exec_context int Önbelleğe bağlı plan üzerindeki bellek baskısı nedeniyle kaldırılan çalıştırma bağlamlarının sayısı.
inuse_cursors int Önbelleklenmiş planı kullanan, bir veya daha fazla imleci içeren şu anda çalışan grupların sayısı.
free_cursors int Önbelleklenmiş plan için boşta veya boş imleç sayısı.
hits_cursors int Önbelleklenmiş plandan aktif olmayan bir imlecin alınıp tekrar kullanıldığı sayısı. Değer, şimdiye kadar yapılan tüm toplu uygulamaların toplamı.
misses_cursors int Etkin olmayan bir imlecin önbellekte bulunamadığı kaç kere.
removed_cursors int Önbelleklenen plandaki bellek baskısı nedeniyle kaldırılan imleç sayısı.
sql_handle varbinary(64) Toplu için SQL kullanıcı adı.

Permissions

SQL Server'da ise izin gerekiyor VIEW SERVER STATE .

Azure SQL Database Basic, S0 ve S1 hizmet amaçlarında ve elastik havuzlardaki veritabanları için sunucu admin hesabı veya Microsoft Entra admin hesabı gereklidir. Diğer tüm SQL Veritabanı hizmet hedeflerinde, VIEW DATABASE STATE izin veritabanında gereklidir.

SQL Server 2022 ve üzeri için izinler

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

Açıklamalar

Seçenekleri Ayarla

Aynı derlenmiş planın kopyaları yalnızca set_options sütunundaki değere göre farklılık gösterebilir. Bu, farklı bağlantıların aynı sorgu için farklı SET seçenekleri kümelerini kullandığını gösterir. Farklı seçenek setleri kullanmak genellikle istenmeyen çünkü ekstra derlemelere, planın yeniden kullanımına ve önbellekte birden fazla plan kopyası nedeniyle plan önbelleğinin şişmesine yol açabilir.

Set Seçeneklerinin Değerlendirilmesi

set_options içinde geri dönen değeri planın derlendiği seçeneklere çevirmek için, set_options değerden değerleri en büyük değerden başlayarak 0'a ulaşana kadar çıkarın. Her çıkardığınız değer, sorgu planında kullanılan bir seçeneğe karşılık gelir. Örneğin, set_options'daki değer 251 ise, planın derlendiği seçenekler ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Paralel Plan(2) ve ANSI_PADDING (1)'dir.

Seçenek Değer
ANSI_PADDING 1
ParalelPlan

Plan paralelliği seçeneklerinin değiştiğini gösterir.
2
GÜÇPLANI 4
CONCAT_NULL_YIELDS_NULL 8
ANSI_WARNINGS 16
ANSI_NULLS 32
TIRNAKLI_BELİRLEYİCİ 64
ANSI_NULL_DFLT_ON 128
ANSI_NULL_DFLT_OFF 256
NoBrowseTable

Planın FOR BROWSE işlemi için çalışma tablosu kullanmadığını gösterir.
512
TriggerOneRow

Planın AFTER tetikleyici delta tabloları için tek satırlı optimizasyon içerdiğini gösterir.
1024
ResyncQuery

Sorgu, sistem içi depolanmış prosedürler tarafından gönderildiğini gösterir.
2048
ARITH_ABORT 4096
SAYISAL_YUVARLAMADURDUR 8192
DATEFIRST 16384
DATEFORMAT 32768
LanguageID 65536
ÜZERİNE

Plan derlendiğinde veritabanı seçeneği PARAMETERIZATION olarak ZORUNLU olarak ayarlandığını gösterir.
131072
ROWCOUNT Şunlar için geçerlidir: SQL Server 2012 (11.x) ve sonrası

262144

Cursors

Etkin olmayan imleçler, derlenmiş bir planda önbellek olarak saklanır; böylece imleci saklamak için kullanılan bellek eşzamanlı imleç kullanıcıları tarafından yeniden kullanılabilir. Örneğin, bir grup bir imleci ayırmadan ilan edip kullandığını varsayalım. Aynı partiyi iki kullanıcı çalıştırıyorsa, iki aktif imleç olur. İmleçler ayrıldıktan sonra (potansiyel olarak farklı gruplar halinde), imleci depolamak için kullanılan bellek önbelleğe alınır ve serbest bırakılmaz. Bu etkin olmayan imleçler listesi derlenmiş planda saklanır. Bir sonraki kullanıcı toplu işlemi başlattığında, önbelleklenmiş imleç belleği yeniden kullanılır ve uygun şekilde aktif bir imleç olarak başlatılır.

İmleç Seçeneklerinin Değerlendirilmesi

required_cursor_options ve acceptable_cursor_options içinde geri dönen değeri planın derlendiği seçeneklere çevirmek için, değerleri sütun değerinden çıkarın, mümkün olan en büyük değerden başlayarak 0'a ulaşana kadar. Her çıkardığınız değer, sorgu planında kullanılan bir imleç seçeneğine karşılık gelir.

Seçenek Değer
Hiç kimse 0
DUYARSIZ 1
TOMAR 2
YALNIZCA OKUMA 4
GÜNCELLEME IÇIN 8
YEREL 16
KÜRESEL 32
FORWARD_ONLY 64
KEYSET 128
DİNAMİK 256
SCROLL_LOCKS 512
IYİMSER 1024
DURUK 2048
FAST_FORWARD 4096
YERINDE 8192
BU select_statement 16384

Örnekler

A. Belirli bir plan için özelliklerin geri verilmesi

Aşağıdaki örnek, belirli bir plan için tüm plan özelliklerini döndürür. Dinamik sys.dm_exec_cached_plans yönetim görünümü, belirlenen plan için plan tutamacını elde etmek için önce sorgulanır. İkinci sorguda, birinci sorgudan bir plan handle değeri ile değiştirin <plan_handle> .

SELECT plan_handle, refcounts, usecounts, size_in_bytes, cacheobjtype, objtype   
FROM sys.dm_exec_cached_plans;  
GO  
SELECT attribute, [value], is_cache_key  
FROM sys.dm_exec_plan_attributes(<plan_handle>);  
GO  

B. Derlenmiş planlar için SET seçenekleri ve önbellekli planlar için SQL kullanıcı adı.

Aşağıdaki örnek, her planın derlendiği seçenekleri temsil eden bir değer döndürür. Ayrıca, önbelleğe alınan tüm planlar için SQL handle geri gönderilir.

SELECT plan_handle, pvt.set_options, pvt.sql_handle  
FROM (  
    SELECT plan_handle, epa.attribute, epa.value   
    FROM sys.dm_exec_cached_plans   
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa  
    WHERE cacheobjtype = 'Compiled Plan') AS ecpa   
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;  
GO  

Ayrıca Bkz.

Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
Yürütmeyle İlgili Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)