Aracılığıyla paylaş


sys.dm_exec_cached_plans (Transact-SQL)

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

Her sorgu planı için SQL Server tarafından önbelleğe alınan bir satır döndürür, böylece sorgu daha hızlı yürütülür. Bu dinamik yönetim görünümünü kullanarak önbellekli sorgu planlarını, önbelleklenmiş sorgu metnini, önbellekli planların aldığı bellek miktarını ve önbelleğe alınan planların yeniden kullanım sayısını bulabilirsiniz.

Azure SQL Veritabanı'nda dinamik yönetim görünümleri, veritabanının kapsamasını etkileyecek bilgileri veya kullanıcının erişimi olan diğer veritabanları hakkındaki bilgileri kullanıma sunmaz. Bu bilgiyi açığa çıkarmamak için, bağlı kiracına ait olmayan veri içeren her satır filtrelenir. Ayrıca, memory_object_address ve pool_id sütunlarındaki değerler filtrelenir; sütun değeri NULL olarak ayarlanır.

Uyarı

Bunu Azure Synapse Analytics veya Analytics Platform Sistemi'nden (PDW) çağırmak için adını sys.dm_pdw_nodes_exec_cached_planskullanın. Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.

Sütun adı Veri türü Description
bucketid int Girişin önbelleğe alındığı hash bucket'in kimliği. Değer, önbellek türü için 0'dan hash tablo boyutuna kadar bir aralık gösterir.

SQL Planları ve Nesne Planları önbellekleri için, hash tablosu boyutu 32-bit sistemlerde 10007'ye, 64-bit sistemlerde ise 40009'a kadar olabilir. Bound Trees önbelleği için, hash tablosu boyutu 32-bit sistemlerde 1009'a, 64-bit sistemlerde ise 4001'e kadar olabilir. Genişletilmiş Depolanmış Prosedürler önbelleği için 32 bit ve 64 bit sistemlerde hash tablosu boyutu 127'ye kadar olabilir.
Refcounts int Bu önbellek nesnesine referans veren önbellek nesnelerinin sayısı. Bir girişin önbelleğe girmesi için refcounts en az 1 olmalıdır.
Kullanım sayıları int Önbellek nesnesinin kaç kez araştırıldığı. Parametrizlenmiş sorgular önbellekte bir plan bulduğunda artırılmaz. Showplan kullanırken birden fazla kez artırılabiliyor.
size_in_bytes int Önbellek nesnesi tarafından tüketilen bayt sayısı.
memory_object_address varbinary(8) Önbelleğe alınan girişin bellek adresi. Bu değer, önbelleğe alınan planın bellek dağılımını almak için sys.dm_os_memory_objects ile ve girişin önbelleğe alınma maliyetini elde etmek için sys.dm_os_memory_cache_entries ile kullanılabilir_entries kullanılabilir.
cacheobjtype nvarchar(34) Önbellekteki nesne türü. Değer aşağıdakilerden biri olabilir:

Derlenmiş Plan

Derlenmiş Plan Taslağı

Çözümleme Ağacı

Genişletilmiş İşlem

CLR Derlenmiş Func

CLR Derlenmiş İşlem
objtype nvarchar(16) Nesne türü. Aşağıda olası değerler ve bunlara karşılık gelen açıklamalar yer almaktadır.

Proc: Saklanan prosedür
Hazırlanmış: Hazırlanmış açıklama
Geçici soru: Geçici soru. Uzak prosedür çağrıları yerine osql veya sqlcmd kullanılarak gönderilen Transact-SQL dil olaylarını ifade eder.
ReplProc: Replikasyon-filtre-prosedürü
Tetikleyici: Tetikleyici
Görünüm: Görüntü
Varsayılan: Varsayılan
UsrTab: Kullanıcı tablosu
SysTab: Sistem tablosu
Kontrol: Kısıtlama KONTROLÜ
Kural: Rule
plan_handle varbinary(64) Bellek içindeki planın tanımlayıcısı. Bu tanımlayıcı geçicidir ve yalnızca plan önbellekte kalırken sabit kalır. Bu değer aşağıdaki dinamik yönetim fonksiyonlarıyla kullanılabilir:

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes
pool_id int Bu plan bellek kullanımının hesaba alındığı kaynak havuzunun kimliği.
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ı.

1

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. Yeniden kullanılan önbelleğe alınan girişlerin toplu metnini geri döndürmek

Aşağıdaki örnek, birden fazla kez kullanılan önbelleğe alınmış tüm girişlerin SQL metnini döndürür.

SELECT usecounts, cacheobjtype, objtype, text   
FROM sys.dm_exec_cached_plans   
CROSS APPLY sys.dm_exec_sql_text(plan_handle)   
WHERE usecounts > 1   
ORDER BY usecounts DESC;  
GO  

B. Tüm önbelleklenmiş tetikleyiciler için sorgu planlarını geri döndürmek

Aşağıdaki örnek, önbelleklenmiş tüm tetikleyicilerin sorgu planlarını döndürür.

SELECT plan_handle, query_plan, objtype   
FROM sys.dm_exec_cached_plans   
CROSS APPLY sys.dm_exec_query_plan(plan_handle)   
WHERE objtype ='Trigger';  
GO  

C. Planın derlendiği SET seçeneklerinin geri verilmesi

Aşağıdaki örnek, planın derlendiği SET seçeneklerini geri getirir. sql_handle Planın geri dönüşü de vardır. PIVOT operatörü, ve sql_handle niteliklerini satır olarak değil, sütun olarak çıkarmak set_options için kullanılır. Döndürülen değer set_optionshakkında daha fazla bilgi için bkz. sys.dm_exec_plan_attributes (Transact-SQL).

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  

D. Tüm önbellekli derlenmiş planların bellek dağılımını döndürmek

Aşağıdaki örnek, önbellekteki tüm derlenmiş planların kullandığı belleğin bir dağılımı geri getirir.

SELECT plan_handle, ecp.memory_object_address AS CompiledPlan_MemoryObject,   
    omo.memory_object_address, type, page_size_in_bytes   
FROM sys.dm_exec_cached_plans AS ecp   
JOIN sys.dm_os_memory_objects AS omo   
    ON ecp.memory_object_address = omo.memory_object_address   
    OR ecp.memory_object_address = omo.parent_address  
WHERE cacheobjtype = 'Compiled Plan';  
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_query_plan (Transact-SQL)
sys.dm_exec_plan_attributes (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_os_memory_objects (Transact-SQL)
sys.dm_os_memory_cache_entries (Transact-SQL)
FROM (Transact-SQL)