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)