Bagikan melalui


sys.dm_clr_appdomains (T-SQL)

Berlaku untuk: SQL Server

Mengembalikan baris untuk setiap domain aplikasi di server. Domain aplikasi (AppDomain) adalah konstruksi dalam runtime bahasa umum (CLR) Microsoft .NET Framework yang merupakan unit isolasi untuk aplikasi. Anda dapat menggunakan tampilan ini untuk memahami dan memecahkan masalah objek integrasi CLR yang dijalankan di Microsoft SQL Server.

Ada beberapa jenis objek database terkelola integrasi CLR. Untuk informasi umum tentang objek ini, lihat Membangun Objek Database dengan Integrasi Common Language Runtime (CLR). Setiap kali objek ini dijalankan, SQL Server membuat AppDomain tempat objek dapat memuat dan menjalankan kode yang diperlukan. Tingkat isolasi untuk AppDomain adalah satu AppDomain per database per pemilik. Artinya, semua objek CLR yang dimiliki oleh pengguna selalu dijalankan dalam AppDomain per database yang sama (jika pengguna mendaftarkan objek database CLR dalam database yang berbeda, objek database CLR akan berjalan di domain aplikasi yang berbeda). AppDomain tidak dihancurkan setelah kode selesai dieksekusi. Sebaliknya, itu di-cache dalam memori untuk eksekusi di masa depan. Ini meningkatkan performa.

Untuk informasi selengkapnya, lihat Domain Aplikasi.

Nama kolom Jenis data Deskripsi
appdomain_address varbinary(8) Alamat AppDomain. Semua objek database terkelola yang dimiliki oleh pengguna selalu dimuat di AppDomain yang sama. Anda dapat menggunakan kolom ini untuk mencari semua rakitan yang saat ini dimuat di AppDomain ini di sys.dm_clr_loaded_assemblies.
appdomain_id int ID AppDomain. Setiap AppDomain memiliki ID unik.
appdomain_name varchar(386) Nama AppDomain seperti yang ditetapkan oleh SQL Server.
creation_time datetime Waktu ketika AppDomain dibuat. Karena AppDomains di-cache dan digunakan kembali untuk performa yang lebih baik, creation_time belum tentu waktu ketika kode dijalankan.
db_id int ID database tempat AppDomain ini dibuat. Kode yang disimpan dalam dua database berbeda tidak dapat berbagi satu AppDomain.
user_id int ID pengguna yang objeknya dapat dijalankan di AppDomain ini.
state nvarchar(128) Deskriptor untuk status AppDomain saat ini. AppDomain dapat berada di status yang berbeda dari pembuatan hingga penghapusan. Lihat bagian Keterangan di artikel ini untuk informasi selengkapnya.
strong_refcount int Jumlah referensi kuat ke AppDomain ini. Ini mencerminkan jumlah batch yang sedang dijalankan yang menggunakan AppDomain ini. Eksekusi tampilan ini akan membuat refcount yang kuat; bahkan jika tidak ada kode yang sedang dijalankan, strong_refcount akan memiliki nilai 1.
weak_refcount int Jumlah referensi lemah ke AppDomain ini. Ini menunjukkan berapa banyak objek di dalam AppDomain yang di-cache. Saat Anda menjalankan objek database terkelola, SQL Server menyimpannya di dalam AppDomain untuk digunakan kembali di masa mendatang. Ini meningkatkan performa.
biaya int Biaya AppDomain. Semakin tinggi biaya, semakin besar kemungkinan AppDomain ini akan dibongkar di bawah tekanan memori. Biaya biasanya tergantung pada berapa banyak memori yang diperlukan untuk membuat ulang AppDomain ini.
value int Nilai AppDomain. Semakin rendah nilainya, semakin besar kemungkinan AppDomain ini akan dibongkar di bawah tekanan memori. Nilai biasanya tergantung pada berapa banyak koneksi atau batch yang menggunakan AppDomain ini.
total_processor_time_ms bigint Total waktu prosesor, dalam milidetik, digunakan oleh semua utas saat menjalankan di domain aplikasi saat ini sejak proses dimulai. Ini setara dengan System.AppDomain.MonitoringTotalProcessorTime.
total_allocated_memory_kb bigint Ukuran total, dalam kilobyte, dari semua alokasi memori yang telah dibuat oleh domain aplikasi sejak dibuat, tanpa mengurangi memori yang telah dikumpulkan. Ini setara dengan System.AppDomain.MonitoringTotalAllocatedMemorySize.
survived_memory_kb bigint Jumlah kilobyte yang bertahan dari koleksi pemblokiran penuh terakhir dan yang diketahui dirujuk oleh domain aplikasi saat ini. Ini setara dengan System.AppDomain.MonitoringSurvivedMemorySize.

Keterangan

Ada hubungan satu-ke-banyak antara dm_clr_appdomains.appdomain_address dan dm_clr_loaded_assemblies.appdomain_address.

Tabel berikut ini mencantumkan kemungkinan nilai status , deskripsinya, dan kapan tabel tersebut terjadi dalam siklus hidup AppDomain . Anda dapat menggunakan informasi ini untuk mengikuti siklus hidup AppDomain dan untuk mengawasi pembongkaran instans AppDomain yang mencurigakan atau berulang, tanpa harus mengurai Log Peristiwa Windows.

Inisialisasi AppDomain

Provinsi Deskripsi
E_APPDOMAIN_CREATING AppDomain sedang dibuat.

Penggunaan AppDomain

Provinsi Deskripsi
E_APPDOMAIN_SHARED Runtime AppDomain siap digunakan oleh beberapa pengguna.
E_APPDOMAIN_SINGLEUSER AppDomain siap digunakan dalam operasi DDL. Ini berbeda dari E_APPDOMAIN_SHARED di appDomain bersama yang digunakan untuk eksekusi integrasi CLR dibandingkan dengan operasi DDL. AppDomain tersebut diisolasi dari operasi bersamaan lainnya.
E_APPDOMAIN_DOOMED AppDomain dijadwalkan untuk dibongkar, tetapi saat ini ada utas yang dijalankan di dalamnya.

Pembersihan AppDomain

Provinsi Deskripsi
E_APPDOMAIN_UNLOADING SQL Server telah meminta agar CLR membongkar AppDomain, biasanya karena rakitan yang berisi objek database terkelola telah diubah atau dihilangkan.
E_APPDOMAIN_UNLOADED CLR telah membongkar AppDomain. Ini biasanya merupakan hasil dari prosedur eskalasi karena ThreadAbort, OutOfMemory, atau pengecualian yang tidak tertangani dalam kode pengguna.
E_APPDOMAIN_ENQUEUE_DESTROY AppDomain telah dibongkar di CLR dan diatur untuk dihancurkan oleh SQL Server.
E_APPDOMAIN_DESTROY AppDomain sedang dalam proses dihancurkan oleh SQL Server.
E_APPDOMAIN_ZOMBIE AppDomain telah dihancurkan oleh SQL Server; namun, tidak semua referensi ke AppDomain telah dibersihkan.

Izin

Memerlukan izin TAMPILKAN STATUS SERVER pada database.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Contoh

Contoh berikut menunjukkan cara menampilkan detail AppDomain untuk rakitan tertentu:

select appdomain_id, creation_time, db_id, user_id, state  
from sys.dm_clr_appdomains a  
where appdomain_address =   
(select appdomain_address   
 from sys.dm_clr_loaded_assemblies  
   where assembly_id = 500);  

Contoh berikut menunjukkan cara menampilkan semua rakitan di AppDomain tertentu:

select a.name, a.assembly_id, a.permission_set_desc, a.is_visible, a.create_date, l.load_time   
from sys.dm_clr_loaded_assemblies as l   
inner join sys.assemblies as a  
on l.assembly_id = a.assembly_id  
where l.appdomain_address =   
(select appdomain_address   
from sys.dm_clr_appdomains  
where appdomain_id = 15);  

Lihat Juga

sys.dm_clr_loaded_assemblies (T-SQL)
Tampilan Manajemen Dinamis terkait Runtime Bahasa Umum (Transact-SQL)