sys.dm_exec_cached_plans (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseInstans Terkelola Azure SQLAzure Synapse AnalyticsSistem Platform Analitik (PDW)Database SQL di Microsoft Fabric

Mengembalikan baris untuk setiap rencana kueri yang di-cache oleh SQL Server untuk eksekusi kueri yang lebih cepat. Anda dapat menggunakan tampilan manajemen dinamis ini untuk menemukan rencana kueri yang di-cache, teks kueri yang di-cache, jumlah memori yang diambil oleh paket yang di-cache, dan jumlah penggunaan kembali paket yang di-cache.

Di Azure SQL Database, tampilan manajemen dinamis tidak dapat mengekspos informasi yang akan memengaruhi penahanan database atau mengekspos informasi tentang database lain yang dapat diakses pengguna. Untuk menghindari mengekspos informasi ini, setiap baris yang berisi data yang bukan milik penyewa yang tersambung difilter. Selain itu, nilai dalam kolom memory_object_address dan pool_id difilter; nilai kolom diatur ke NULL.

Note

Untuk memanggil ini dari Azure Synapse Analytics atau Analytics Platform System (PDW), gunakan nama sys.dm_pdw_nodes_exec_cached_plans. Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Nama kolom Jenis data Deskripsi
bucketid int ID wadah hash tempat entri di-cache. Nilai menunjukkan rentang dari 0 hingga ukuran tabel hash untuk jenis cache.

Untuk cache Paket SQL dan Rencana Objek, ukuran tabel hash dapat mencapai 10.007 pada sistem 32-bit dan hingga 40.009 pada sistem 64-bit. Untuk cache Pohon Terikat, ukuran tabel hash dapat mencapai 1.009 pada sistem 32-bit dan hingga 4.001 pada sistem 64-bit. Untuk cache Extended Stored Procedures, ukuran tabel hash dapat mencapai 127 pada sistem 32-bit dan 64-bit.
refcounts int Jumlah objek cache yang mereferensikan objek cache ini. refcounts harus minimal 1 agar entri berada di cache.
usecounts int Berapa kali objek cache telah dicari. Tidak mengalami peningkatan saat kueri berparameter menemukan rencana di cache. Dapat dinaikkan beberapa kali saat menggunakan showplan.
size_in_bytes int Jumlah byte yang dikonsumsi oleh objek cache.
memory_object_address varbinary(8) Alamat memori entri yang di-cache. Nilai ini dapat digunakan dengan sys.dm_os_memory_objects untuk mendapatkan perincian memori dari rencana yang di-cache dan dengan sys.dm_os_memory_cache_entries_entries untuk mendapatkan biaya penembolokan entri.
cacheobjtype nvarchar(34) Jenis objek dalam cache. Nilainya bisa menjadi salah satu dari:

Paket yang Dikompilasi
Stub Paket yang Dikompilasi
Uraikan Pohon
Proc yang Diperluas
CLR Dikompilasi Func
CLR Dikompilasi Proc
objtype nvarchar(16) Jenis objek. Di bawah ini adalah nilai yang mungkin dan deskripsi yang sesuai.

Proc: Prosedur tersimpan
Disiapkan: Pernyataan yang disiapkan
Ad hoc: Kueri ad hoc. Mengacu pada Transact-SQL yang dikirimkan sebagai peristiwa bahasa dengan menggunakan osql atau sqlcmd alih-alih sebagai panggilan prosedur jarak jauh.
ReplProc: Prosedur filter replikasi
Pemicu: Pemicu
Tampilan: Tampilan
Default: Default
UsrTab: Tabel pengguna
SysTab: Tabel sistem
Pemeriksaan: PERIKSA batasan
Aturan: Aturan
plan_handle varbinary(64) Pengidentifikasi untuk paket dalam memori. Pengidentifikasi ini bersifat sementara dan tetap konstan hanya saat paket tetap berada di cache. Nilai ini mungkin digunakan dengan fungsi manajemen dinamis berikut:

sys.dm_exec_sql_text
sys.dm_exec_query_plan
sys.dm_exec_plan_attributes
pool_id int ID kumpulan sumber daya tempat penggunaan memori paket ini diperhitungkan.
pdw_node_id int Pengidentifikasi untuk simpul tempat distribusi ini aktif.

Berlaku untuk: Azure Synapse Analytics, Analytics Platform System (PDW)

Permissions

SQL Server 2019 (15.x) dan versi yang lebih lama memerlukan VIEW SERVER STATE izin.

SQL Server 2022 (16.x) dan versi yang lebih baru, dan Azure SQL Managed Instance, memerlukan VIEW SERVER PERFORMANCE STATE izin.

Pada tujuan layanan Azure SQL Database Basic, S0 Pada semua tujuan layanan SQL Database lainnya, izin VIEW DATABASE STATE pada database, atau keanggotaan dalam ##MS_ServerStateReader## peran server diperlukan.

Examples

A. Mengembalikan teks batch dari entri yang di-cache yang digunakan kembali

Contoh berikut mengembalikan teks SQL dari semua entri cache yang telah digunakan lebih dari sekali.

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;

B. Mengembalikan rencana kueri untuk semua pemicu yang di-cache

Contoh berikut mengembalikan rencana kueri dari semua pemicu yang di-cache.

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

C. Mengembalikan SET opsi yang digunakan untuk menyusun paket

Contoh berikut mengembalikan SET opsi tempat paket dikompilasi. sql_handle Untuk rencana juga dikembalikan. Operator PIVOT digunakan untuk menghasilkan set_options atribut dan sql_handle sebagai kolom daripada sebagai baris. Untuk informasi selengkapnya tentang nilai yang dikembalikan di set_options, lihat sys.dm_exec_plan_attributes.

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;

D. Mengembalikan perincian memori dari semua paket yang dikompilasi cache

Contoh berikut mengembalikan perincian memori yang digunakan oleh semua paket yang dikompilasi dalam cache.

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
     INNER 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';