Bagikan melalui


sys.dm_exec_plan_attributes (T-SQL)

Berlaku untuk: SQL Server

Mengembalikan satu baris per atribut paket untuk paket yang ditentukan oleh handel paket. Anda dapat menggunakan fungsi bernilai tabel ini untuk mendapatkan detail tentang paket tertentu, seperti nilai kunci cache atau jumlah eksekusi simultan paket saat ini.

Catatan

Beberapa informasi yang dikembalikan melalui fungsi ini memetakan ke tampilan kompatibilitas mundur sys.syscacheobjects .

Sintaks

sys.dm_exec_plan_attributes ( plan_handle )  

Argumen

plan_handle
Secara unik mengidentifikasi rencana kueri untuk batch yang telah dijalankan dan paketnya berada di cache paket. plan_handle adalah varbinary(64). Handel paket dapat diperoleh dari tampilan manajemen dinamis sys.dm_exec_cached_plans .

Tabel Dikembalikan

Nama kolom Jenis data Deskripsi
atribut varchar(128) Nama atribut yang terkait dengan paket ini. Tabel tepat di bawah ini mencantumkan atribut yang mungkin, jenis datanya, dan deskripsinya.
value aql_variant Nilai atribut yang terkait dengan paket ini.
is_cache_key bit Menunjukkan apakah atribut digunakan sebagai bagian dari kunci pencarian cache untuk paket tersebut.

Dari tabel di atas, atribut dapat memiliki nilai berikut:

Atribut Jenis data Deskripsi
set_options int Menunjukkan nilai opsi yang dikompilasi dengan paket.
objectId int Salah satu kunci utama yang digunakan untuk mencari objek di cache. Ini adalah ID objek yang disimpan dalam sys.objects untuk objek database (prosedur, tampilan, pemicu, dan sebagainya). Untuk paket jenis "Adhoc" atau "Siap", ini adalah hash internal teks batch.
dbid int Adalah ID database yang berisi entitas yang dirujuk paket.

Untuk paket ad hoc atau yang disiapkan, ini adalah ID database tempat batch dijalankan.
dbid_execute int Untuk objek sistem yang disimpan dalam database Sumber Daya , ID database tempat paket yang di-cache dijalankan. Untuk semua kasus lainnya, itu adalah 0.
user_id int Nilai -2 menunjukkan bahwa batch yang dikirimkan tidak bergantung pada resolusi nama implisit dan dapat dibagikan di antara pengguna yang berbeda. Ini adalah metode yang disukai. Nilai lain mewakili ID pengguna pengguna yang mengirimkan kueri dalam database.
language_id smallint ID bahasa koneksi yang membuat objek cache. Untuk informasi selengkapnya, lihat sys.syslanguages (Transact-SQL).
date_format smallint Format tanggal koneksi yang membuat objek cache. Untuk informasi selengkapnya, lihat MENGATUR DATEFORMAT (Transact-SQL).
date_first kecil Tanggal nilai pertama. Untuk informasi selengkapnya, lihat MENGATUR DATEFIRST (Transact-SQL).
compat_level kecil Mewakili tingkat kompatibilitas yang ditetapkan dalam database dalam konteks rencana kueri dikompilasi. Tingkat kompatibilitas yang dikembalikan adalah tingkat kompatibilitas konteks database saat ini untuk pernyataan adhoc, dan tidak terpengaruh oleh petunjuk kueri QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n. Untuk pernyataan yang terkandung dalam prosedur atau fungsi tersimpan, itu sesuai dengan tingkat kompatibilitas database tempat prosedur atau fungsi tersimpan dibuat.
status int Bit status internal yang merupakan bagian dari kunci pencarian cache.
required_cursor_options int Opsi kursor yang ditentukan oleh pengguna seperti jenis kursor.
acceptable_cursor_options int Opsi kursor yang dapat dikonversi secara implisit ke SQL Server untuk mendukung eksekusi pernyataan. Misalnya, pengguna dapat menentukan kursor dinamis, tetapi pengoptimal kueri diizinkan untuk mengonversi jenis kursor ini menjadi kursor statis.
merge_action_type smallint Jenis rencana eksekusi pemicu yang digunakan sebagai hasil dari pernyataan MERGE.

0 menunjukkan rencana non-pemicu, rencana pemicu yang tidak dijalankan sebagai hasil pernyataan MERGE, atau rencana pemicu yang dijalankan sebagai hasil dari pernyataan MERGE yang hanya menentukan tindakan DELETE.

1 menunjukkan rencana pemicu INSERT yang berjalan sebagai hasil dari pernyataan MERGE.

2 menunjukkan rencana pemicu UPDATE yang berjalan sebagai hasil dari pernyataan MERGE.

3 menunjukkan rencana pemicu DELETE yang berjalan sebagai hasil dari pernyataan MERGE yang berisi tindakan INSERT atau UPDATE yang sesuai.

Untuk pemicu berlapis yang dijalankan dengan tindakan berkala, nilai ini adalah tindakan pernyataan MERGE yang menyebabkan kaskade.
is_replication_specific int Mewakili bahwa sesi tempat paket ini dikompilasi adalah sesi yang terhubung ke instans SQL Server menggunakan properti koneksi yang tidak terdokumentasi yang memungkinkan server mengidentifikasi sesi sebagai yang dibuat oleh komponen replikasi, sehingga perilaku aspek fungsional tertentu dari server diubah sesuai dengan apa yang diharapkan komponen replikasi tersebut.
optional_spid smallint Koneksi session_id (spid) menjadi bagian dari kunci cache untuk mengurangi jumlah kompilasi ulang. Ini mencegah kompilasi ulang untuk penggunaan kembali satu sesi rencana yang melibatkan tabel temp yang tidak terikat secara dinamis.
optional_clr_trigger_dbid int Hanya diisi dalam kasus pemicu CLR DML. ID database yang berisi entitas.

Untuk jenis objek lainnya, mengembalikan nol.
optional_clr_trigger_objid int Hanya diisi dalam kasus pemicu CLR DML. ID objek yang disimpan dalam sys.objects.

Untuk jenis objek lainnya, mengembalikan nol.
parent_plan_handle varbinary(64) Selalu NULL.
is_azure_user_plan kecil 1 untuk kueri yang dijalankan dalam Azure SQL Database dari sesi yang dimulai oleh pengguna.

0 untuk kueri yang telah dijalankan dari sesi yang tidak dimulai oleh pengguna akhir, tetapi oleh aplikasi yang berjalan dari dalam infrastruktur Azure yang mengeluarkan kueri untuk tujuan lain mengumpulkan telemetri atau menjalankan tugas administratif. Pelanggan tidak dikenakan biaya untuk sumber daya yang dikonsumsi oleh kueri di mana is_azure_user_plan = 0.

Hanya Azure SQL Database .
inuse_exec_context int Jumlah batch yang saat ini mengeksekusi yang menggunakan rencana kueri.
free_exec_context int Jumlah konteks eksekusi cache untuk rencana kueri yang saat ini tidak digunakan.
hits_exec_context int Berapa kali konteks eksekusi diperoleh dari cache rencana dan digunakan kembali, menyimpan overhead kompilasi ulang pernyataan SQL. Nilainya adalah agregat untuk semua eksekusi batch sejauh ini.
misses_exec_context int Berapa kali konteks eksekusi tidak dapat ditemukan dalam cache rencana, menghasilkan pembuatan konteks eksekusi baru untuk eksekusi batch.
removed_exec_context int Jumlah konteks eksekusi yang telah dihapus karena tekanan memori pada rencana yang di-cache.
inuse_cursors int Jumlah batch yang saat ini mengeksekusi yang berisi satu atau beberapa kursor yang menggunakan paket cache.
free_cursors int Jumlah kursor diam atau gratis untuk paket yang di-cache.
hits_cursors int Berapa kali kursor yang tidak aktif diperoleh dari rencana yang di-cache dan digunakan kembali. Nilainya adalah agregat untuk semua eksekusi batch sejauh ini.
misses_cursors int Berapa kali kursor tidak aktif tidak dapat ditemukan di cache.
removed_cursors int Jumlah kursor yang telah dihapus karena tekanan memori pada rencana yang di-cache.
sql_handle varbinary(64) Handel SQL untuk batch.

Izin

Di SQL Server, memerlukan VIEW SERVER STATE izin.

Pada tujuan layanan Azure SQL Database Basic, S0, dan S1, dan untuk database di kumpulan elastis, akun admin server atau akun admin Microsoft Entra diperlukan. Pada semua tujuan layanan SQL Database lainnya, VIEW DATABASE STATE izin diperlukan dalam database.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Keterangan

Atur Opsi

Salinan paket yang dikompilasi yang sama mungkin hanya berbeda dengan nilai di kolom set_options . Ini menunjukkan bahwa koneksi yang berbeda menggunakan set opsi SET yang berbeda untuk kueri yang sama. Menggunakan serangkaian opsi yang berbeda biasanya tidak diinginkan karena dapat menyebabkan kompilasi ekstra, penggunaan kembali rencana yang lebih sedikit, dan merencanakan inflasi cache karena beberapa salinan rencana dalam cache.

Mengevaluasi Opsi Set

Untuk menerjemahkan nilai yang dikembalikan dalam set_options ke opsi tempat paket dikompilasi, kurangi nilai dari nilai set_options , dimulai dengan nilai terbesar yang mungkin, hingga Anda mencapai 0. Setiap nilai yang Anda kurangi sesuai dengan opsi yang digunakan dalam rencana kueri. Misalnya, jika nilai dalam set_options adalah 251, opsi yang dikompilasi paket ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Paket Paralel(2) dan ANSI_PADDING (1).

Opsi Nilai
ANSI_PADDING 1
ParallelPlan

Menunjukkan bahwa opsi paralelisme rencana telah berubah.
2
FORCEPLAN 4
CONCAT_NULL_YIELDS_NULL 8
ANSI_WARNINGS 16
ANSI_NULLS 32
QUOTED_IDENTIFIER 64
ANSI_NULL_DFLT_ON 128
ANSI_NULL_DFLT_OFF 256
NoBrowseTable

Menunjukkan bahwa paket tidak menggunakan tabel kerja untuk menerapkan operasi FOR BROWSE.
512
TriggerOneRow

Menunjukkan bahwa paket berisi pengoptimalan baris tunggal untuk tabel delta pemicu AFTER.
1024
ResyncQuery

Menunjukkan bahwa kueri dikirimkan oleh prosedur tersimpan sistem internal.
2048
ARITH_ABORT 4096
NUMERIC_ROUNDABORT 8192
DATEFIRST 16384
DATEFORMAT 32768
LanguageID 65536
ATAS

Menunjukkan bahwa PARAMETERISASI opsi database diatur ke FORCED saat paket dikompilasi.
131072
ROWCOUNT Berlaku Untuk: SQL Server 2012 (11.x) dan yang lebih baru

262144

Kursor

Kursor tidak aktif di-cache dalam rencana yang dikompilasi sehingga memori yang digunakan untuk menyimpan kursor dapat digunakan kembali oleh pengguna kursor bersamaan. Misalnya, misalkan batch mendeklarasikan dan menggunakan kursor tanpa membatalkan alokasinya. Jika ada dua pengguna yang menjalankan batch yang sama, akan ada dua kursor aktif. Setelah kursor dibatalkan alokasinya (berpotensi dalam batch yang berbeda), memori yang digunakan untuk menyimpan kursor di-cache dan tidak dirilis. Daftar kursor tidak aktif ini disimpan dalam rencana yang dikompilasi. Saat berikutnya pengguna menjalankan batch, memori kursor yang di-cache akan digunakan kembali dan diinisialisasi dengan tepat sebagai kursor aktif.

Mengevaluasi Opsi Kursor

Untuk menerjemahkan nilai yang dikembalikan dalam required_cursor_options dan acceptable_cursor_options ke opsi tempat paket dikompilasi, kurangi nilai dari nilai kolom, dimulai dengan nilai terbesar yang mungkin, hingga Anda mencapai 0. Setiap nilai yang Anda kurangi sesuai dengan opsi kursor yang digunakan dalam rencana kueri.

Opsi Nilai
Tidak 0
SENSITIF 1
SCROLL 2
BACA SAJA 4
UNTUK PEMBARUAN 8
LOKAL 16
GLOBAL 32
FORWARD_ONLY 64
SET KUNCI 128
DINAMIS 256
SCROLL_LOCKS 512
OPTIMIS 1024
STATIS 2048
FAST_FORWARD 4096
DI TEMPAT 8192
UNTUK select_statement 16384

Contoh

J. Mengembalikan atribut untuk paket tertentu

Contoh berikut mengembalikan semua atribut paket untuk paket tertentu. sys.dm_exec_cached_plans Tampilan manajemen dinamis dikueri terlebih dahulu untuk mendapatkan handel rencana untuk paket yang ditentukan. Di kueri kedua, ganti <plan_handle> dengan nilai handel paket dari kueri pertama.

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. Mengembalikan opsi SET untuk paket yang dikompilasi dan handel SQL untuk paket yang di-cache

Contoh berikut mengembalikan nilai yang mewakili opsi yang dikompilasi oleh setiap paket. Selain itu, handel SQL untuk semua paket yang di-cache dikembalikan.

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  

Lihat Juga

Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (Transact-SQL)
sys.dm_exec_cached_plans (T-SQL)
sys.databases (T-SQL)
sys.objects (Transact-SQL)