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)