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 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL 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)