sys.dm_exec_cursors (T-SQL)

Berlaku untuk:SQL Server

Mengembalikan informasi tentang kursor yang terbuka dalam berbagai database.

Sintaks

  
dm_exec_cursors (session_id | 0 )  

Argumen

session_id | 0
ID sesi. Jika session_id ditentukan, fungsi ini mengembalikan informasi tentang kursor dalam sesi yang ditentukan.

Jika 0 ditentukan, fungsi mengembalikan informasi tentang semua kursor untuk semua sesi.

Tabel Dikembalikan

Nama kolom Jenis data Deskripsi
session_id int ID sesi yang menyimpan kursor ini.
cursor_id int ID objek kursor.
nama nvarchar(256) Nama kursor seperti yang didefinisikan oleh pengguna.
properties nvarchar(256) Menentukan properti kursor. Nilai properti berikut digabungkan untuk membentuk nilai kolom ini:
Antarmuka Deklarasi
Tipe Kursor
Konkurensi Kursor
Cakupan kursor
Tingkat bersarang kursor

Misalnya, nilai yang dikembalikan dalam kolom ini mungkin adalah "TSQL | Dinamis | Optimis | Global (0)".
sql_handle varbinary(64) Tangani ke teks batch yang mendeklarasikan kursor.
statement_start_offset int Jumlah karakter ke dalam batch yang sedang dijalankan atau prosedur tersimpan di mana pernyataan yang sedang dijalankan dimulai. Dapat digunakan bersama dengan sql_handle, statement_end_offset, dan fungsi manajemen dinamis sys.dm_exec_sql_text untuk mengambil pernyataan yang sedang dijalankan untuk permintaan tersebut.
statement_end_offset int Jumlah karakter ke dalam batch yang sedang dijalankan atau prosedur tersimpan di mana pernyataan yang sedang dijalankan berakhir. Dapat digunakan bersama dengan sql_handle, statement_start_offset, dan fungsi manajemen dinamis sys.dm_exec_sql_text untuk mengambil pernyataan yang sedang dijalankan untuk permintaan tersebut.
plan_generation_num bigint Nomor urut yang dapat digunakan untuk membedakan antara instans rencana setelah kompilasi ulang.
creation_time datetime Tanda waktu ketika kursor ini dibuat.
is_open bit Menentukan apakah kursor terbuka.
is_async_population bit Menentukan apakah utas latar belakang masih secara asinkron mengisi kursor KEYSET atau STATIC.
is_close_on_commit bit Menentukan apakah kursor dideklarasikan dengan menggunakan CURSOR_CLOSE_ON_COMMIT.

1 = Kursor akan ditutup ketika transaksi berakhir.
fetch_status int Mengembalikan status pengambilan terakhir kursor. Ini adalah nilai @@FETCH_STATUS terakhir yang dikembalikan.
fetch_buffer_size int Mengembalikan informasi tentang ukuran buffer pengambilan.

1 = Kursor Transact-SQL. Ini dapat diatur ke nilai yang lebih tinggi untuk kursor API.
fetch_buffer_start int Untuk kursor FAST_FORWARD dan DINAMIS, kursor mengembalikan 0 jika kursor tidak terbuka atau jika diposisikan sebelum baris pertama. Jika tidak, ia mengembalikan -1.

Untuk kursor STATIC dan KEYSET, kursor mengembalikan 0 jika kursor tidak terbuka, dan -1 jika kursor diposisikan di luar baris terakhir.

Jika tidak, ia mengembalikan nomor baris tempat baris diposisikan.
ansi_position int Posisi kursor dalam buffer ambil.
worker_time bigint Waktu yang dihabiskan, dalam mikro detik, oleh pekerja yang menjalankan kursor ini.
Membaca bigint Jumlah bacaan yang dilakukan oleh kursor.
Menulis bigint Jumlah penulisan yang dilakukan oleh kursor.
dormant_duration bigint Milidetik sejak kueri terakhir (buka atau ambil) pada kursor ini dimulai.

Izin

Memerlukan izin TAMPILKAN STATUS SERVER pada server.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Keterangan

Tabel berikut ini menyediakan informasi tentang antarmuka deklarasi kursor dan menyertakan nilai yang mungkin untuk kolom properti.

Properti Deskripsi
API Kursor dideklarasikan dengan menggunakan salah satu API akses data (ODBC, OLEDB).
TSQL Kursor dideklarasikan dengan menggunakan sintaks KURSOR DEKLARASI Transact-SQL.

Tabel berikut ini menyediakan informasi tentang jenis kursor dan menyertakan nilai yang mungkin untuk kolom properti.

Jenis Deskripsi
Set kunci Kursor dinyatakan sebagai Keyset.
Dinamis Kursor dinyatakan sebagai Dinamis.
Snapshot Kursor dinyatakan sebagai Rekam Jepret atau Statis.
Fast_Forward Kursor dinyatakan sebagai Maju Cepat.

Tabel berikut ini menyediakan informasi tentang konkurensi kursor dan menyertakan nilai yang mungkin untuk kolom properti.

Konkurensi Deskripsi
Baca Saja Kursor dinyatakan sebagai baca-saja.
Kunci Gulir Kursor menggunakan kunci gulir.
Optimis Kursor menggunakan kontrol konkurensi optimis.

Tabel berikut ini menyediakan informasi tentang cakupan kursor dan menyertakan nilai yang mungkin untuk kolom properti.

Cakupan Deskripsi
Lokal Menentukan bahwa cakupan kursor bersifat lokal untuk batch, prosedur tersimpan, atau pemicu tempat kursor dibuat.
Global Menentukan bahwa cakupan kursor bersifat global ke koneksi.

Contoh

J. Mendeteksi kursor lama

Contoh ini mengembalikan informasi tentang kursor yang telah terbuka di server lebih lama dari waktu yang ditentukan 36 jam.

SELECT creation_time, cursor_id, name, c.session_id, login_name   
FROM sys.dm_exec_cursors(0) AS c   
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id   
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;  
GO  

Lihat Juga

Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis Terkait Eksekusi (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)